L'exécution de Ubuntu 14.04 et du programme de mise à jour indique que tous les logiciels sont à jour. J'ai essayé de redémarrer.
Je me prépare pour un cours utilisant Python. Je l'ai installé et ça fonctionne bien. Cependant, j'ai maintenant ce problème: lorsque je tape une commande inconnue dans bash, je reçois une erreur python:
cliff@Climate:~$ UnknownProgram
Fatal Python error: Py_Initialize: Unable to get the locale encoding
File "/usr/lib/python2.7/encodings/__init__.py", line 123
raise CodecRegistryError,\
^
SyntaxError: invalid syntax
Aborted
cliff@Climate:~$ env | grep -i python
PYTHONPATH=/usr/lib/pymodules/python2.7:/usr/lib/python2.7
cliff@Climate:~$ which UnknownProgram
cliff@Climate:~$ which python
/usr/bin/python
cliff@Climate:~$ python --version
Python 2.7.6
cliff@Climate:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Je pense que pycharm a également installé du python3 sur la boîte.
J'ai trouvé que/usr/lib/command-not-found inclut un Shebang pour python3. J'imagine que c'est en quelque sorte le bon fichier Py_Initialize. Comment corriger cela puisque j'ai besoin de python 2.7 pour la classe?
Supprimer l’exportation de PYTHONPATH de mon .bashrc a résolu le problème. Je reçois maintenant le traitement normal si je tape un nom de commande incorrect. Je devrai faire quelques recherches supplémentaires pour être sûr que mon code python 2.7 prend les bons modules sans ce paramètre d'environnement supplémentaire.
Lorsque vous utilisez Python, évitez de placer directement une configuration spécifique à Python dans votre env. Spécifiez plutôt Python chemins, variables, etc. dans les scripts Python que vous écrivez et même alors, uniquement lorsque cela est nécessaire.
La raison en est qu’elle permet à chaque script ou programme Python d'appeler Python à sa propre manière sans interférer avec ou inhiber de manière générale la fonctionnalité des autres scripts python. programmes. Dans ce cas particulier, vous spécifiiez un chemin Python 2.7 à utiliser universellement par votre shell bash. Ce faisant, vous avez cassé tous les programmes qui reposent sur une autre variable d'environnement Python (Python 3 dans ce cas) mais ne spécifiez pas explicitement ces variables.
Spécifier la version de Python à utiliser au début d'un script Python définira implicitement les chemins d'accès par défaut corrects pour que le programme fonctionne, annulant ainsi la nécessité d'utiliser explicitement Python. _ variables d'environnement telles que celles que vous avez définies dans votre fichier .bashrcexport. Pour ce faire, faites en sorte que la première ligne de vos scripts Python ressemble à ceci:
#!/usr/bin/python2
Inversement, vous pouvez spécifier que Python 3 doit être utilisé lors de l'exécution d'un script avec cette ligne comme première ligne de votre script:
#!/usr/bin/python3
Vous pouvez aller plus loin en spécifiant la version exacte de Python si vous le souhaitez, c'est-à-dire :
#!/usr/bin/python2.7
ou
#!/usr/bin/python3.4
Je confirme.
Cela se produit sur les systèmes où anaconda fonctionne correctement lors de la mise à niveau d'ubuntu 17.4 à 17.10, où le système utilise maintenant Python3.6. PYTHONHOME l'a fait fonctionner directement.
J'ai donc supprimé de mon .bashrc cet ajout lors de l'installation d'Anaconda:
export PATH=/opt/anaconda/bin:$PATH
export PYTHONHOME=/opt/anaconda/
A côté, python par défaut est toujours python2, pas anaconda distrib, mais je peux toujours passer à mon python env avec python2.7,
$ source activate myenv
ou exécutez le /opt/anaconda/python2
, de sorte que cela fonctionne bien, c’est seulement python maintenant. Python3 dépend de ce système. facile. nge