J'ai récemment installé un tas de fichiers de points sur mon Mac avec d'autres applications (j'ai changé pour iTerm au lieu de Terminal et Sublime comme éditeur de texte par défaut), mais depuis lors, tous mes environnements virtuels ont cessé de fonctionner, même si leurs dossiers au sein de .virtualenvs sont toujours là et donnent l'erreur suivante chaque fois que j'essaie d'exécuter quoi que ce soit en eux:
dyld: Library not loaded: @executable_path/../.Python
Referenced from: /Users/[user]/.virtualenvs/modclass/bin/python
Reason: image not found
Trace/BPT trap: 5
J'ai supprimé tous les fichiers liés aux fichiers de points et ai restauré mon .bash_profile à son état antérieur, mais le problème persiste. Existe-t-il un moyen de diagnostiquer le problème ou de le résoudre facilement (par exemple, il n’est pas nécessaire de créer à nouveau tous les virtualenvs)?
J'ai trouvé la solution au problème ici , donc tout le mérite revient à l'auteur.
En résumé, lorsque vous créez un fichier virtualenv, de nombreux liens symboliques sont créés vers le Python installé par Homebrew.
Voici un exemple:
$ ls -la ~/.virtualenvs/my-virtual-env
...
lrwxr-xr-x 1 ryan staff 78 Jun 25 13:21 .Python -> /usr/local/Cellar/python/2.7.7/Frameworks/Python.framework/Versions/2.7/Python
...
Lorsque vous mettez à niveau Python à l'aide de Homebrew, puis que vous exécutez brew cleanup
, les liens symboliques dans virtualenv pointent vers des chemins qui n'existent plus (car Homebrew les a supprimés).
Les liens symboliques doivent pointer vers le Python nouvellement installé:
lrwxr-xr-x 1 ryan staff 78 Jun 25 13:21 .Python -> /usr/local/Cellar/python/2.7.8_1/Frameworks/Python.framework/Versions/2.7/Python
La solution consiste à supprimer les liens symboliques dans virtualenv, puis à les recréer:
find ~/.virtualenvs/my-virtual-env/ -type l -delete
virtualenv ~/.virtualenvs/my-virtual-env
Il est probablement préférable de vérifier quels liens seront supprimés avant de les supprimer:
find ~/.virtualenvs/my-virtual-env/ -type l
À mon avis, il est même préférable de ne supprimer que les liens symboliques rompus. Vous pouvez le faire en utilisant GNU find
:
gfind ~/.virtualenvs/my-virtual-env/ -type l -xtype l -delete
Vous pouvez installer GNU find
avec Homebrew si vous ne l'avez pas déjà:
brew install findutils
Notez que par défaut, les programmes GNU installés avec Homebrew ont tendance à être préfixés de la lettre g
. Ceci permet d'éviter l'observation du binaire find
fourni avec OS X.
Après avoir essayé plusieurs choses, cela a fonctionné pour moi:
accédez à votre répertoire virtualenv (mais n'exécutez pas workon):
cd ~/.virtualenv/name_of_broken_venv
Supprimez maintenant ces fichiers:
rm -rf .Python bin/python* lib/python2.7/* include/python2.7
Alors pour reconstruire votre venv, exécutez:
virtualenv .
workon name_of_broken_venv
pip freeze
Vous devriez maintenant voir une liste de vos paquets installés à nouveau.
Cela s'est produit lorsque j'ai mis à jour Mac OS X Mavericks de Snow Leopard. Je devais aussi ré-installer le brassin. J'espère que vous avez exécuté la commande freeze pour votre projet avec pip.
Pour résoudre ce problème, vous devez mettre à jour les chemins sur lesquels pointe l'environnement virtuel.
brew install python
pip install --upgrade virtualenvwrapper
rmvirtualenv old_project
mkvirtualenv new_project
workon new_project
pip install -r requirements.txt
Cela devrait laisser le projet tel qu'il était avant.
Il semble la bonne façon de résoudre ce problème est de courir
pip install --upgrade virtualenv
après avoir mis à niveau python avec Homebrew.
Cela devrait être une procédure générale pour toute formule qui installe quelque chose comme Python, qui a son propre système de gestion de paquets. Lorsque vous installez brew install python
, vous installez python
et pip
et easy_install
et virtualenv
et ainsi de suite. Par conséquent, si ces outils peuvent être mis à jour automatiquement, il est préférable d'essayer de le faire avant de considérer Homebrew comme source de problèmes.
Si cela est dû à un brew upgrade
qui a mis à niveau son Python et que vous pouvez passer à la version précédente, essayez brew switch python [previous version]
, par exemple brew switch python 3.6.5
. D'ici.
Si vous avez éliminé python3, essayez simplement brew upgrade python3
qui le corrige pour moi.
Une réponse de la version mise à jour @Chris Wedgwood
pour conserver site-packages
(conserver les packages installés)
cd ~/.virtualenv/name_of_broken_venv
mv lib/python2.7/site-packages ./
rm -rf .Python bin lib include
virtualenv .
rm -rf lib/python2.7/site-packages
mv ./site-packages lib/python2.7/
Quiconque utilise pipenv (et vous devriez!) Peut simplement utiliser ces deux commandes - sans que le venv ne soit activé:
rm -rf `pipenv --venv` # remove the broken venv
pipenv install --dev # reinstall the venv from pipfile
instructions virtualenvwrapper
Comme indiqué dans la réponse acceptée, la cause principale est probablement une mise à jour homebrew qui signifie que vos liens symboliques virtualenv pointent vers des chemins python cassés - voir détails ici .
Pour chaque env virtuel, vous devez réaffecter les liens symboliques pour qu'ils pointent sur le chemin correct de python (dans la cave à café). Voici comment le faire avec virtualenvwrapper . Ici, je mets à jour un env virtuel appelé "my-example-env".
cd ~/PYTHON_ENVS
find ./my-example-env -type l -delete
mkvirtualenv my-example-env
Terminé.
Utiliser Python 2.7.10.
Une seule commande virtualenv path-to-env
le fait. Documentation
$ virtualenv path-to-env
Overwriting path-to-env/lib/python2.7/orig-prefix.txt with new content
New python executable in path-to-env/bin/python2.7
Also creating executable in path-to-env/bin/python
Installing setuptools, pip, wheel...done.
Le problème pour moi (un utilisateur MacOS) est que brew
a mis à jour les liens Python et virtualenvs vers l'ancienne version qui a été supprimée.
Nous pouvons vérifier et résoudre le problème en
>> ls -al ~/.virtualenvs/<your-virtual-env>/.Python
.Python -> /usr/local/Cellar/python/<old-version>/Frameworks/Python.framework/Versions/3.7/Python
>> rm ~/.virtualenvs/<your-virtual-env>/.Python
>> ln -s /usr/local/Cellar/python/<new-version>/Frameworks/Python.framework/Versions/3.7/Python ~/.virtualenvs/<your-virtual-env>/.Python
J'ai récemment fait face à cela. Aucune des solutions ci-dessus n'a fonctionné pour moi. On dirait que ce n'était pas vraiment le problème de Python. Quand je courais
aws s3 ls
Je recevais l'erreur suivante:
dyld: Library not loaded: @executable_path/../.Python
Cela signifie que l'exécutable de la bibliothèque aws
est soit inexistant soit corrompu, j'ai donc désinstallé et réinstallé aws-cli
en suivant les instructions de ce lien et tout a fonctionné !!
Ce qui a résolu le problème pour moi était de désinstaller python3 et pipenv, puis de les réinstaller.
brew uninstall pipenv
brew uninstall python3
brew install python3
brew install pipenv
J'ai essayé les meilleures méthodes, mais elles ne fonctionnaient pas, pour moi, qui essayaient de faire fonctionner tox. Ce qui a finalement fonctionné a été:
Sudo pip install tox
même si tox était déjà installé. La sortie s'est terminée par:
Successfully built filelock
Installing collected packages: py, pluggy, toml, filelock, tox
Successfully installed filelock-3.0.10 pluggy-0.11.0 py-1.8.0 toml-0.10.0 tox-3.9.0
La réponse acceptée ne fonctionne pas pour moi: le fichier $WORKON_HOME/*/bin/python2.7
n'est plus un lien symbolique, c'est un exécutable à part entière:
$ file $WORKON_HOME/*/bin/python2.7
/Users/sds/.virtualenvs/.../bin/python2.7: Mach-O 64-bit executable x86_64
...
La solution consiste, hélas, à supprimer complètement et à recréer à partir de zéro tous les environnements virtuels.
Pour la référence:
deactivate
pip install --user virtualenv virtualenvwrapper
pip install --user --upgrade virtualenv virtualenvwrapper
for ve in $(lsvirtualenv -b); do
# assume that each VE is associated with a project
# and the project has the requirements.txt file
project=$(cat $WORKON_HOME/$ve/.project)
rmvirtualenv $ve
mkvirtualenv -a $project -r requirements.txt $ve
done
J'avais un env. Virtuel cassé en raison d'une réinstallation de python par Homebrew (ainsi que des liens symboliques brisés) et de quelques "installations Sudo pip" que j'avais effectuées précédemment. Les conseils de Weizhong ont été très utiles pour résoudre les problèmes sans avoir à réinstaller les paquets. Je devais également faire ce qui suit pour le problème des autorisations mixtes.
Sudo chown -R nom_utilisateur lib/python2.7/site-packages
Simplement mettre à niveau python3 a fonctionné pour moi:
brew upgrade python3