web-dev-qa-db-fra.com

Le clic abandonnera toute exécution car Python 3 a été configuré pour utiliser ASCII comme encodage pour l'environnement)

J'ai téléchargé Quokka Python/Flask CMS sur un serveur CentOS7. Tout fonctionne bien avec la commande

Sudo python3 manage.py runserver --Host 0.0.0.0 --port 80

Ensuite, je crée un fichier /etc/init.d/quokkacms. Le fichier contient le code suivant

start() {
        echo -n "Starting quokkacms: "
        python3 /var/www/quokka/manage.py runserver --Host 0.0.0.0 --port 80
        touch /var/lock/subsys/quokkacms
        return 0
}
stop() {
        echo -n "Shutting down quokkacms: "
        rm -f /var/lock/subsys/quokkacms
        return 0
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)

        ;;
    restart)
        stop
        start
        ;;

    *)
        echo "Usage: quokkacms {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

Mais je reçois une erreur lors de l'exécution de Sudo service quokkacms start

RuntimeError: le clic interrompra l'exécution ultérieure car Python 3 a été configuré pour utiliser ASCII comme encodage pour l'environnement. Passez à Python 2 ou consultez http://click.pocoo.org/python3/ pour
étapes d'atténuation.

Il me semble que c'est le script bash. Comment se fait-il que j'obtienne des résultats différents? J'ai également suivi les instructions du lien dans le message d'erreur, mais je n'ai toujours pas eu de chance.

[mise à jour] J'avais déjà essayé la solution fournie par Click avant de poser cette question. Vérifiez les résultats ci-dessous (je lance en root):

[root@webserver quokka]# python3
Python 3.4.3 (default, Jan 26 2016, 02:25:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> import codecs
>>> print(locale.getpreferredencoding())
UTF-8
>>> print(codecs.lookup(locale.getpreferredencoding()).name)
utf-8
>>> locale.getdefaultlocale()
('en_US', 'UTF-8')
>>> locale.CODESET
14
>>>
22
Dustin Sun

Si vous essayez d'exécuter des tests, vous devez définir à chaque fois les variables d'environnement suivantes:

export LC_ALL=en_US.utf-8
export LANG=en_US.utf-8

Faire cela à chaque fois résoudra l'erreur.

Il peut également être possible de définir cela dans votre configuration IDE run comme

LC_ALL=en_US.UTF-8;LANG=en_US.UTF-8

Par exemple, consultez le paramètre suivant dans PyCharm 2016:

39
GHETTO.CHiLD

Ajout de plus aux solutions existantes:

Si vous voyez quelque chose comme cette erreur dans Python 3:

Traceback (most recent call last):
  ...
RuntimeError: Click will abort further execution because Python 3 was
  configured to use ASCII as encoding for the environment. Either switch
  to Python 2 or consult http://click.pocoo.org/python3/ for
  mitigation steps.

Vous avez affaire à un environnement où Python 3 pense que vous êtes limité aux données ASCII. La solution à ces problèmes est différente selon les paramètres régionaux exécutés par votre ordinateur) dans.

Par exemple, si vous avez une machine Linux allemande, vous pouvez résoudre le problème en exportant les paramètres régionaux vers de_DE.utf-8:

export LC_ALL=de_DE.utf-8
export LANG=de_DE.utf-8

Si vous êtes sur une machine américaine, en_US.utf-8 est l'encodage de choix. Sur certains systèmes Linux plus récents, vous pouvez également essayer C.UTF-8 comme paramètre régional:

export LC_ALL=C.UTF-8
export LANG=C.UTF-8

Extrait de Python 3 Surrogate Handling

1
Amit Kushwaha