Depuis la mise à jour à partir de Homebrew Python 2.7.11 (à partir de la version 2.7.10), je ne peux tout à fait pas enregistrer mon paquet sur PyPi à partir de la console PyCharm IDE.
En cours d'exécution (en tant qu '"outil externe")
python -B setup.py register -r pypitest
Je reçois maintenant
Traceback (most recent call last):
File "setup.py", line 22, in <module>
from setuptools import setup
File "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", line 12, in <module>
from setuptools.extension import Extension
File "/usr/local/lib/python2.7/site-packages/setuptools/extension.py", line 8, in <module>
from .dist import _get_unpatched
File "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", line 16, in <module>
from setuptools.depends import Require
File "/usr/local/lib/python2.7/site-packages/setuptools/depends.py", line 6, in <module>
from setuptools import compat
File "/usr/local/lib/python2.7/site-packages/setuptools/compat.py", line 17, in <module>
import httplib
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 80, in <module>
import mimetools
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetools.py", line 6, in <module>
import tempfile
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tempfile.py", line 32, in <module>
import io as _io
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/io.py", line 51, in <module>
import _io
ImportError: dlopen(/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so, 2): Symbol not found: __PyCodecInfo_GetIncrementalDecoder
Referenced from: /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
Expected in: flat namespace
in /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
Process finished with exit code 1
Je ne sais pas comment procéder. Je ne reçois ce problème que si j'exécute depuis la console de mon IDE. Si je le fais directement sur la ligne de commande du système (Terminal sous OS X), je n’ai aucun problème.
OS X 10.11.3; Homebrew Python 2.7.11; PyCharm 5.0.3
tl; dr: corrigez ce problème en effectuant l'une des opérations suivantes:
hash -r python
, OR EDIT: Une réponse à ma question connexe montre clairement ce qui se passe ici. Lorsque vous installez une nouvelle version de python, vous devrez peut-être exécuter hash -r python
pour indiquer à bash de réinitialiser l'emplacement "mis en cache" sur l'exécutable python
.
Dans mon cas, je tapais python
, qui se trouvait sur mon $PATH
à /usr/local/bin/python
. Mais bash
utilisait toujours l'ancien emplacement de cache /usr/bin/python
. Ainsi, l'ancien exécutable a été appelé, mais le nouveau chemin a été fourni à python dans sys.argv[0]
. Cela signifie que l'ancien exécutable était en cours d'exécution, mais la nouvelle valeur sys.executable
provoquait le chargement de tous les modules incorrects (y compris le module io
).
J'ai le même problème. J'ai installé python 2.7.11 via un programme d'installation de Python.org. Étrangement, le problème semble être lié à une différence subtile entre la façon dont OSX lance python
lorsque je l’invoque depuis le shell en utilisant le chemin complet par opposition à l’utilisation du mot python
.
Donc, pour moi, cela fonctionne (en invoquant python via le chemin complet /usr/local/bin/python
):
$ which python
/usr/local/bin/python
$ /usr/local/bin/python -c "import io"
$
... mais cela ne veut pas:
$ python -c "import io"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/io.py", line 51, in <module>
import _io
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so, 2): Symbol not found: __PyCodecInfo_GetIncrementalDecoder
Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
Expected in: flat namespace
in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
Donc, pour contourner le problème, vous pouvez essayer de faire la même chose.
Ailleurs, j'ai posté un question distincte à propos de ce comportement déroutant. Peut-être qu’appelant simplement python
invoque un étrange mélange de l’exécutable 2.7.11 avec les 2.7.10 dylibs ??
Selon https://github.com/klen/python-mode/issues/634 :
J'ai eu le même problème, mais résolu avec succès. Dans mon cas, j'ai compilé python et vim avec homebrew, lorsque PYTHON_PATH a été spécifié et défini sur l'un de mes environnements de développement, où j'avais également quelques bibliothèques, y compris io. La solution de contournement était simple: ouvrez un nouveau terminal, assurez-vous de ne pas avoir personnalisé PYTHON_PATH, désinstallez python, désinstallez vim. Réinstallez les deux.
et
Problème résolu.
Le coupable est la mise à jour de python 2.7.10 à 2.7.11.
Si vous utilisez le contrôle de package conda, exécutez simplement "conda install python = 2.7.10" pour résoudre ce problème.
Cela ne donne cependant pas la cause première. Comme cela se produit avec _io
, cela ressemble à un bogue dans python 2.7.11 (peu probable, il y aurait un tollé à l'échelle mondiale et un correctif Prompt s'il était), ou un bogue d'emballage ou incompatibilité de version spécifiquement avec la version homebrew (et peut-être certaines connexes, aussi).
Essayez de import _io
dans la console et si cela réussit, vérifiez s'il a été chargé à partir du même chemin.
Réinstallez Python.
brew unlink python && brew reinstall python
Sécuriser le chemin
export PYTHONPATH=$PYTHONPATH:/usr/local/bin/
BACKUP et Changer l'ordre du fichier "chemins".
Sudo nano /etc/paths
il semble que, dans l’ordre des chemins, il soit décisif d’exécuter correctement python. Dans mon cas, le résultat était:
#Sudo nano /etc/paths
/usr/bin
/usr/local/bin
/bin
/usr/sbin
/sbin
Sur mon mac, le chemin est comme ça.
$ which python
/usr/local/bin/python
Maintenant je peux courir les deux:
$ /usr/local/bin/python -c "import io"
$ python -c "import io"
J'ai eu le même problème, il est résolu avec succès en remplaçant simplement le fichier _io.so.
Sudo find / -name _io.so
copier le chemin du fichier _io.so
qui NE FAIT PAS appartient à python-2.7.11. Par exemple, copiez le chemin de _io.so qui se trouve sous python-2.7.5: /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib- dynload/_io.so
Remplacez le fichier /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
par le fichier _io.so
que vous venez de trouver.
Cela m'est arrivé aussi à MacVim. Je l'ai résolu en m'assurant que :python print(sys.path)
utilise système Python (par exemple /Library/Python/2.7/...
)
Depuis que j'ai installé MacVim via Homebrew, je viens de le faire en:
Crée un nouveau shell qui avait which python
-> /usr/bin/python
. Pour mon cas, je devais supprimer la ligne pyenv
de mon .bash_profile
. Si vous avez installé Python via Homebrew, vous souhaiterez peut-être commencer par brew unlink python
brew reinstall macvim
Une autre solution rapide, si vous voulez bien vous en tenir à Python 2.7.10, est de spécifier le chemin d'accès de l'exécutable interpréteur Python qui sera utilisé pour virtualenv. Sur OSX, ce chemin est généralement /usr/bin/python
:
virtualenv venv --python=/usr/bin/python
Si votre problème est causé par anaconda
, il est inutile de supprimer le répertoire //anaconda
.
Ouvrez simplement votre ~/.bash_profile
, trouvez la ligne
export PATH="//anaconda/bin:$PATH
et commentez-le, puis redémarrez votre session de terminal.
J'ai eu cette erreur après un téléchargement échoué de NLTK, j'avais besoin de désinstaller anaconda:
Sudo rm -rf ~/anaconda
update PATH variable
Vous ne pouvez pas ajouter de commentaire (?), Alors il suffit de partager mon expérience. La mise à niveau vers la version 2.7.10 fonctionne.
Cela s'est produit alors que j'avais déjà essayé de créer un fichier venv dans un dossier et que, par erreur, j'essayais d'en initialiser un deuxième! Je viens donc de supprimer le répertoire venv et de relancer la commande. Très probablement, ce n’est pas la solution à cette solution, mais la recherche de mon erreur m’a amené ici. Cela pourrait donc aider d’autres bloqués.
J'ai eu le même problème lorsque j'ai essayé d'utiliser PyCharm. Résolu en réglant "interprète python" dans la configuration du projet pour qu'il pointe vers l'environnement virtuel python que je voulais utiliser, qui était un env Anaconda. D'une manière ou d'une autre, le chemin de l'interprète manquait de la partie "anaconda" de ~ /.../ anaconda /.../_ io.so. Pas besoin de désinstaller anaconda.
J'ai résolu ce problème en supprimant le lien symbolique qui se trouvait dans /usr/local/bin
et en copiant le binaire réel python, pointé par ledit lien, à cet endroit.