web-dev-qa-db-ja.com

Virtualenvsの壊れた参照

最近、他のアプリケーション(デフォルトのテキストエディターとしてターミナルではなくiTermに変更し、デフォルトのテキストエディターとしてSublimeに変更)とともに多数のドットファイルをMacにインストールしましたが、それ以降、.virtualenvs内のフォルダーはすべての仮想環境が機能しなくなりましたまだそこにあり、何かを実行しようとすると次のエラーが発生します:

dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /Users/[user]/.virtualenvs/modclass/bin/python
  Reason: image not found
Trace/BPT trap: 5

ドットファイルに関連するすべてのファイルを削除し、.bash_profileを以前の状態に復元しましたが、問題は解決しません。問題を診断したり、簡単な方法で解決したりする方法はありますか(たとえば、すべてのvirtualenvをもう一度作成する必要はありません)?

161
oxtay

問題の解決策を見つけました here なので、すべての功績は著者にあります。

要点は、virtualenvを作成すると、HomebrewがインストールされたPythonへの多くのシンボリックリンクが作成されるということです。

次に例を示します。

$ 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
...

Homebrewを使用してPythonをアップグレードし、brew cleanupを実行すると、virtualenvのシンボリックリンクは、(Homebrewが削除したため)もはや存在しないパスを指します。

シンボリックリンクは、新しくインストールされたPythonを指す必要があります。

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

解決策は、virtualenvのシンボリックリンクを削除してから再作成することです。

find ~/.virtualenvs/my-virtual-env/ -type l -delete
virtualenv ~/.virtualenvs/my-virtual-env

削除する前に、どのリンクが最初に削除されるかを確認するのがおそらく最善です:

find ~/.virtualenvs/my-virtual-env/ -type l

私の意見では、壊れたシンボリックリンクのみを削除する方が良いでしょう。 GNU findを使用してこれを行うことができます。

gfind ~/.virtualenvs/my-virtual-env/ -type l -xtype l -delete

Homebrewをまだお持ちでない場合は、GNU findをインストールできます。

brew install findutils

デフォルトでは、HomebrewでインストールされたGNUプログラムの先頭にはgという文字が付きます。これは、OS Xに同梱されるfindバイナリのシャドウイングを回避するためです。

279
Ryan Kaskel

いくつかのことを試した後、これは私のために働いた:

virtualenvディレクトリに移動します(ただし、workonは実行しないでください)。

cd ~/.virtualenv/name_of_broken_venv

これらのファイルを削除します。

rm -rf .Python bin/python* lib/python2.7/* include/python2.7

次に、venvを再構築するには、次を実行します。

virtualenv .
workon name_of_broken_venv
pip freeze

インストールされたパッケージのリストが再び表示されるはずです。

31
Chris Wedgwood

これは、Snow LeopardからMac OS X Mavericksにアップデートしたときに発生しました。 brewも事前に再インストールする必要がありました。うまくいけば、pipでプロジェクトの凍結コマンドを実行しました。

解決するには、仮想環境が指すパスを更新する必要があります。

  • Brewでpythonのバージョンをインストールします。

brew install python

  • Virtualenvwrapperを再インストールします。

pip install --upgrade virtualenvwrapper

  • 古い仮想環境を削除しました:

rmvirtualenv old_project

  • 新しい仮想環境を作成します。

mkvirtualenv new_project

  • 新しい仮想環境で作業する

workon new_project

  • Pipを使用して、新しいプロジェクトの要件をインストールします。

pip install -r requirements.txt

これにより、プロジェクトは以前のままになります。

12
Robert Brisita

表示される この問題を解決する適切な方法は、実行することです

 pip install --upgrade virtualenv

pythonをHomebrewでアップグレードした後。

これは、独自のパッケージ管理システムを持つpythonのようなものをインストールする数式の一般的な手順です。 brew install pythonをインストールすると、pythonpipおよびeasy_installvirtualenvなどがインストールされます。したがって、これらのツールを自己更新できる場合は、Homebrewを問題の原因として探す前に、それを試してみるのが最善です。

5
Nate

これが、Pythonをアップグレードしたbrew upgradeが原因で、以前のバージョンにダウングレードしても問題ない場合は、brew switch python [previous version]、たとえばbrew switch python 3.6.5を試してください。 ここから

5
ryan

@Chris Wedgwoodを維持するための更新バージョンsite-packagesの回答(パッケージをインストールしたままにする)

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/
4
WeizhongTu

Python3を破壊した場合は、それを修正してくれたbrew upgrade python3を試してください。

2
jmoz

私は最近これに直面しました。上記のソリューションはどれもうまくいきませんでした。実際にはPythonの問題ではなかったようです。走っていたとき

aws s3 ls

次のエラーが発生しました:

dyld: Library not loaded: @executable_path/../.Python

これは、ライブラリawsが指しているライブラリが存在しないか破損していることを意味します。したがって、 this link の指示に従ってaws-cliをアンインストールして再インストールしました。

2
thekosmix

pipenv を使用している人は誰でも!

rm -rf `pipenv --venv` # remove the broken venv
pipenv install --dev   # reinstall the venv from pipfile 
1
Robotnik

仮想環境ラッパーの指示

受け入れられた答えに示されているように、根本的な原因はおそらく、virtualenvシンボリックリンクが壊れたpythonパスを指していることを意味するhomebrew更新です-詳細は here を参照してください。

仮想環境ごとに、正しいpythonパス(醸造セラー内)を指すようにシンボリックリンクを再割り当てする必要があります。 virtualenvwrapper を使用して行う方法を次に示します。ここでは、「my-example-env」という仮想envを更新しています。

cd ~/PYTHON_ENVS
find ./my-example-env -type l -delete
mkvirtualenv my-example-env

全部できた。

1
arcseldon

Python 2.7.10。の使用.

単一のコマンドvirtualenv path-to-envが実行します。 ドキュメント

$ 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.
1
Ayush Goel

私(MacOSユーザー)にとっての問題は、brewがPythonおよびvirtualenvsリンクを、削除された古いバージョンに更新したことです。

確認して修正することができます

>> 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
1
liuyihe

私にとってそれを修正したのは、python3とpipenvをアンインストールしてから再インストールするだけでした。

brew uninstall pipenv
brew uninstall python3
brew install python3 
brew install pipenv
0
Lord Nikon

私はトップのいくつかの方法を試しましたが、私にとってはうまくいきませんでした。最終的に機能したのは:

Sudo pip install tox

toxが既にインストールされている場合でも。出力は次で終了しました:

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
0
Marco

受け入れられた答えは私にとってはうまくいきません:ファイル$WORKON_HOME/*/bin/python2.7はもはやシンボリックリンクではなく、本格的な実行可能ファイルです:

$ file $WORKON_HOME/*/bin/python2.7
/Users/sds/.virtualenvs/.../bin/python2.7: Mach-O 64-bit executable x86_64
...

解決策は、残念ながら、仮想環境を完全に削除して再作成することですall

参考のために:

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
0
sds

Homebrewのpythonの再インストール(これによりシンボリックリンクが壊れる)と、以前に行ったいくつかの "Sudo pipインストール"により、仮想環境が壊れていました。 Weizhongのヒントは、パッケージを再インストールせずに問題を解決するのに非常に役立ちました。権限が混在する問題については、次のことも行わなければなりませんでした。

Sudo chown -R my_username lib/python2.7/site-packages

0
P. Gabbur

Python3をアップグレードするだけでうまくいきました。

brew upgrade python3
0
Flavio Wuensche