J'ai récemment installé un tas de fichiers dot sur mon Mac avec quelques autres applications (j'ai changé pour iTerm au lieu de Terminal et Sublime comme mon éditeur de texte par défaut) mais depuis, tous mes environnements virtuels ont cessé de fonctionner, bien que leurs dossiers à l'intérieur .virtualenvs sont toujours là et ils 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 dot et j'ai restauré mon .bash_profile à ce qu'il était auparavant, mais le problème persiste. Existe-t-il un moyen de diagnostiquer le problème ou de le résoudre de manière simple (par exemple, ne nécessitant pas de recréer tous les virtualenvs)?
rmvirtualenv
fonctionne toujours mais lorsque j'essaye de lancermkvirtualenv
, j'obtiens l'erreur suivante:-bash: /usr/local/bin/virtualenv: /usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/Resour: bad interpreter: No such file or directory
Donc, cela semble un problème avec mes chemins python mais je ne peux pas voir où est le problème, car je peux exécuter python et ça semble bien.virtualenv
commandes fonctionnent maintenant en théorie, mais comme il y a un problème avec python, elles ne font rien. Le vrai problème est donc avec le python de brew. Et je soupçonne que la raison est à cause d'un changement de nom dans les répertoires python. Pour une raison quelconque, toutes ces commandes recherchent python dans le dossier,/usr/local/Cellar/python/2.7.6
mais le nom du dossier est en fait/usr/local/Cellar/python/2.7.6_1
.2.7.6_1
à2.7.6
. Si le pire venait au pire, vous pourriez le renommer.Réponses:
J'ai trouvé la solution au problème ici , donc tout le mérite revient à l'auteur.
L'essentiel est que lorsque vous créez un virtualenv, de nombreux liens symboliques sont créés vers le Python installé par Homebrew.
Voici un exemple:
Lorsque vous mettez à niveau Python à l'aide de Homebrew, puis 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é:
La solution consiste à supprimer les liens symboliques dans virtualenv puis à les recréer:
Il est probablement préférable de vérifier quels liens seront supprimés avant de les supprimer:
À mon avis, il est encore mieux de ne supprimer que les liens symboliques brisés. Vous pouvez le faire en utilisant GNU
find
:Vous pouvez installer GNU
find
avec Homebrew si vous ne l'avez pas déjà:Notez que par défaut, les programmes GNU installés avec Homebrew ont tendance à être préfixés par la lettre
g
. Ceci pour éviter de masquer lefind
binaire fourni avec OS X.la source
gfind
était parfait, car j'avais beaucoup de liens symboliques ininterrompus (par exemple, nodeenv) que je ne voulais pas supprimerfind -L ~/.virtualenvs/my-virtual-env/ -type l | xargs rm
pip3 freeze dyld: lazy symbol binding failed: Symbol not found: __Py_UnixMain
virtualenv ~/.virtualenvs/foo -p python2
Après avoir essayé quelques choses, cela a fonctionné pour moi:
allez dans votre répertoire virtualenv (mais ne lancez pas workon):
Maintenant, supprimez ces fichiers:
Ensuite, pour reconstruire votre venv, exécutez:
Vous devriez maintenant voir à nouveau une liste de vos packages installés.
la source
pipenv --rm
et de recréer,pipenv shell
,pipenv install
Cela s'est produit lorsque j'ai mis à jour Mac OS X Mavericks à partir de Snow Leopard. J'ai dû réinstaller le breuvage au préalable aussi. J'espère que vous avez exécuté la commande de gel de votre projet avec pip.
Pour résoudre ce problème, vous devez mettre à jour les chemins d'accès vers lesquels l'environnement virtuel pointe.
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 auparavant.
la source
La
@Chris Wedgwood
réponse d'une version de mise à jour à conserversite-packages
(garder les packages installés)la source
Il semble que la bonne façon de résoudre ce problème consiste à exécuter
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 packages. Lorsque vous installez
brew install python
, vous installezpython
etpip
eteasy_install
etvirtualenv
et ainsi de suite. Donc, si ces outils peuvent être mis à jour automatiquement, il est préférable d'essayer de le faire avant de rechercher Homebrew comme source de problèmes.la source
virtualenv .
j'ai exécuté: dans mon environnement virtuel cassé. La version mise à jour avirtualenv
ensuite recréé les dépendances nécessaires et j'étais prêt à partir. Ce processus était plus autogéré et robuste que la réponse acceptée pour moi.Si cela a été causé par un
brew upgrade
qui a mis à niveau son Python, et que vous êtes d'accord avec la rétrogradation vers la version précédente, essayezbrew switch python [previous version]
, par exemplebrew switch python 3.6.5
. D'ici.la source
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 de python cassés - voir les détails ici .
Pour chaque env virtuel, vous devez réaffecter les liens symboliques pour pointer vers le chemin python correct (dans la cave de brassage). Voici comment le faire avec virtualenvwrapper . Ici, je mets à jour un env virtuel appelé "mon-exemple-env".
Terminé.
la source
Quiconque utilise pipenv (et vous devriez!) Peut simplement utiliser ces deux commandes - sans activer le venv:
la source
pipenv --rm
dans le dossier de votre env puispipenv install --dev
Si vous avez cassé python3, essayez de le corriger
brew upgrade python3
pour moi.la source
J'ai récemment fait face à cela. Aucune des solutions ci-dessus n'a fonctionné pour moi. Il semble que ce n'était pas vraiment le problème de Python. Lorsque j'exécutais,
aws s3 ls
j'obtenais l'erreur suivante:
dyld: Library not loaded: @executable_path/../.Python
cela signifie que l'
aws
exécutable de la bibliothèque pointe vers soit n'existe pas ou est corrompu, j'ai donc désinstallé et réinstallé enaws-cli
suivant les instructions de ce lien et cela a fonctionné !!la source
Le problème pour moi (un utilisateur de MacOS) est que
brew
les liens Python et virtualenvs ont été mis à jour avec l'ancienne version qui a été supprimée.Nous pouvons le vérifier et le réparer par
la source
J'ai eu un problème similaire et je l'ai résolu en reconstruisant simplement l'environnement virtuel avec
virtualenv .
la source
Utilisation de Python 2.7.10.
Une seule commande le
virtualenv path-to-env
fait. Documentationla source
J'ai eu un env virtuel cassé en raison d'une réinstallation Homebrew de python (donc des liens symboliques cassés) et aussi de quelques "sudo pip install" que j'avais fait plus tôt. Les conseils de Weizhong ont été très utiles pour résoudre les problèmes sans avoir à réinstaller les packages. J'ai également dû faire ce qui suit pour le problème des autorisations mixtes.
sudo chown -R my_username lib / python2.7 / site-packages
la source
Virtualenvs est cassé. Parfois, le moyen le plus simple consiste à supprimer les dossiers venv et à recréer virutalenvs.
la source
Si vous utilisez pipenv, le simple fait de
pipenv --rm
résoudre le problème.la source
J'étais confronté au même problème après la mise à niveau de brew sur mon OSX Catalina.
Après avoir essayé plein de trucs, je trouve que ce qui suit est la solution la meilleure et la plus facile.
Dans un premier temps, supprimez l'env virtuel. (Optionnel)
puis recréez un nouveau virtualenv
Référence: https://www.jeremycade.com/python/osx/homebrew/2015/03/02/fixing-virtualenv-after-a-python-upgrade/
la source
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:La solution est, hélas, de supprimer complètement et de recréer à partir de zéro tous les environnements virtuels.
Pour la référence:
la source
--always-copy
argument pour le remplacer.--always-copy
et j'ai des fichiers réguliers :-(La simple mise à niveau de python3 a fonctionné pour moi:
la source
J'ai essayé les quelques meilleures méthodes, mais elles ne fonctionnaient pas, pour moi, qui essayaient de faire fonctionner la toxicité. Ce qui a finalement fonctionné était:
même si tox était déjà installé. La sortie s'est terminée avec:
la source
Ce qui a résolu le problème pour moi était simplement de désinstaller python3 et pipenv puis de les réinstaller.
la source
Toutes les réponses sont excellentes ici, j'ai essayé quelques solutions mentionnées ci-dessus par Ryan et Chris et je n'ai pas pu résoudre le problème, j'ai donc dû suivre un chemin rapide et sale.
rm -rf <project dir>
(oumv <project dir> <backup projct dir>
si vous souhaitez conserver une sauvegarde)git clone <project git url>
Rien de nouveau ici, mais ça rend la vie plus facile!
la source
Je suis sûr que je suis en retard à la fête, mais je tiens à dire que la résolution de ce problème est beaucoup plus simple que celle discutée ici.
Vous pouvez facilement régénérer l'environnement virtuel sans avoir à supprimer / modifier quoi que ce soit. En supposant que votre environnement défectueux est appelé,
env_to_fix
vous pouvez simplement effectuer les opérations suivantes:Cela va régénérer les liens et réparer l'environnement sans avoir besoin de vider l'état actuel quelque part et de le restaurer.
la source
Je suis tombé sur le même problème lorsque je pointais mon temps d'exécution Python de 2 à 3 sur mon Mac, pointant le chemin d'alias python vers python 3. Je recrée ensuite un nouveau virtualenv et réinstalle les packages dont j'ai besoin pour mon projet. Pour mon cas d'utilisation, j'ai eu un programme python écrit sur une feuille Google. Nettoyez quelques paquets qui sont différents de l'implémentation de python 2 et wa la, les choses ont recommencé à fonctionner.
la source