Virtualenvsの壊れた参照


238

最近、他のいくつかのアプリケーション(ターミナルではなく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

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



コメントありがとうございます、@ unubtu。これは確かに役に立ちます。しかし、私は新しいvirtualenvを作ることもできません。私はrmvirtualenvまだ動作しますが、実行しようとするmkvirtualenvと、次のエラー -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 が発生します。Pythonパスに問題があるようですが、Pythonを実行できるので問題の場所がわかりません。
oxtay 2014

1
[更新]問題を見つけた可能性がありますが、確かではなく、実際に修正方法もわかりません。現在、すべてのvirtualenvコマンドは理論上は機能しているようですが、Pythonに問題があるため、何も実行されません。したがって、本当の問題はbrewのpythonにあります。そして、その理由はpythonディレクトリの名前が変更されたためだと疑っています。何らかの理由で、これらのすべてのコマンドはpythonをフォルダーで探しています/usr/local/Cellar/python/2.7.6が、フォルダーの名前は実際には/usr/local/Cellar/python/2.7.6_1です。
oxtay 2014

私は初心者なので、手動で名前を2.7.6_1から2.7.6に変更して何が起こるかを確認することがどれほど危険かはわかりません。
oxtay 14

名前2.7.6_1をに変更できるはず2.7.6です。最悪の場合、名前を変更できます。
unutbu 2014

回答:


369

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

要点は、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

findまだ持っていない場合は、GNU をHomebrewとともにインストールできます。

brew install findutils

デフォルトでは、Homebrewと共にインストールされたGNUプログラムには接頭辞としてが付いている傾向があることに注意してくださいg。これはfind、OS Xに付属するバイナリのシャドウイングを回避するためです。


4
gfind削除したくない、壊れていないシンボリックリンク(nodeenvなど)がたくさんあったので、+ 1 は完璧でした
2Toad

3
壊れたシンボリックリンクを削除するもう一つの方法は、標準的な検索を使用している:find -L ~/.virtualenvs/my-virtual-env/ -type l | xargs rm
vdboor

virtualenvディレクトリ全体を削除しました。今、私はシンボリックリンクを削除できません。このページに記載されている解決策のいずれも、Macでは動作しません。それでも同じエラー「画像が見つかりません。トラップを中止:6」
Aseem

これらの手順は私にとってはpip3 freeze dyld: lazy symbol binding failed: Symbol not found: __Py_UnixMain
うまくいき

1
ただ、追加するENVは、Python 2とした場合には、引数を指定して、それを実行しますvirtualenv ~/.virtualenvs/foo -p python2、それ以外の場合は、Python 3を使用します
Bohumir Zamecnik

41

いくつかのことを試した後、これは私にとってうまくいきました:

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

cd ~/.virtualenv/name_of_broken_venv

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

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

次に、envを再構築するには、次のコマンドを実行します。

virtualenv .
workon name_of_broken_venv
pip freeze

インストールしたパッケージのリストが再び表示されます。


FWIW、El Capitanにアップグレードして自作を再インストールした後、私はこのアプローチを試したところ、パッケージリストが保持されませんでした。
Ryan

1
pipenvであなたが実行して削除することができpipenv --rm、そして再作成pipenv shellpipenv install
ハリー・モレノ

14

これは、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

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


これは少し前のことであり、最終的にこれらの行に沿って何かをしたと思いますが、そのとき 'pip freeze> requirements.txt'を実行していなかったため、これは最も効率的なソリューションではありませんでした。学んだ教訓。
oxtay 2014

13

@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/

1
これは完璧を超えています。すべてのパッケージを保持しながらPythonバージョンを移行するのに役立ちます。これに従っている場合は、@ Chris Wedgewoodの指示を実行しないでください。
Harish Prasanna

10

表示されます。この問題を解決するための適切な方法で実行することです

 pip install --upgrade virtualenv

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

これは、独自のパッケージ管理システムを持つpythonなどをインストールする式の一般的な手順です。あなたがインストールするとbrew install python、インストールpythonpipeasy_installvirtualenvのように。したがって、これらのツールが自己更新できる場合は、問題の原因としてHomebrewを調べる前にそうすることをお勧めします。


これは、特にsetuptoolsの問題で機能しました:警告:setuptools == 0.6c12dev-r88846のsvnの場所が見つかりません
Robert Brisita '15

1
私はこのソリューションを適用し、続いて実行しました: virtualenv . 壊れた仮想環境で。virtualenvその後の更新バージョンは必要な依存関係を再作成し、私は行ってよかったです。このプロセスは、私が受け入れた回答よりも自己管理的で堅牢でした。
christang 2017年

2020年には、これはまだ答えです。
scubabuddha

7

これが発生した場合でbrew upgrade、そのPythonのアップグレード、およびあなた以前のバージョンにダウングレードしていることをOK、してみてくださいbrew switch python [previous version]例えば、brew switch python 3.6.5ここから。


4

virtualenvwrapper命令

受け入れられた回答に示されているように、根本的な原因はおそらく自作のアップデートであり、これはvirtualenvシンボリックリンクが壊れたpythonパスを指していることを意味します-詳細はこちらを参照してください

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

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

すべて完了。


4

pipenvを使用している人なら誰でも(そしてあなたもそうすべきです!)、envをアクティブ化しなくても、次の2つのコマンドを使用できます。

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

1
またpipenv --rm、envのフォルダーで使用することもできますpipenv install --dev
Handfeger

2

python3をバストした場合はbrew upgrade python3、それを試してみてください。


2

私は最近これに直面しました。上記の解決策のどれも私にとってうまくいきませんでした。実際にはPythonの問題ではなかったようです。実行

aws s3 ls

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

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

これは、aws実行可能ライブラリが指しているライブラリが存在しないか破損しているためaws-cliこのリンクからの指示に従ってアンインストールして再インストールしたところ、動作しました!!


2

私(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

これは、Python3.6がインストールされたシステムにPython 3.7をインストールした後、リンク切れを修正するためにも機能しました
lukik

2

同様の問題があり、仮想環境を再構築するだけで解決しました virtualenv .


SOへようこそ。回答ありがとうございますが、他の回答に加えて付加価値を提供した方がよいでしょう。この場合、別のユーザーが既にそのソリューションを投稿しているため、あなたの答えは追加の価値を提供しません。以前の回答が参考になった場合は、十分な評判を得
David Buck

1

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

pythonのHomebrew再インストール(それによりシンボリックリンクが壊れた)のために仮想環境が壊れ、以前に実行したいくつかの "sudo pip install"もありました。Weizhongのヒントは、パッケージを再インストールせずに問題を修正するのに非常に役立ちました。混合権限の問題については、次のことも実行する必要がありました。

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


他のユーザーの回答を補完する場合は、編集できるようにコメントを残す必要があります。素晴らしい貢献。
Francisco Peters

彼は答えにコメントするのに十分な評判ポイントを持っていません。
Tyler Smith

1

virtualenvが壊れています。時々簡単な方法は、envフォルダーを削除してvirutalenvを再作成することです。


1

pipenvを使用している場合は、実行pipenv --rmするだけで問題が解決します。


1

OSXカタリナでbrewをアップグレードした後、同じ問題に直面していました。

たくさんのものを試した後、私は以下が最良で簡単な解決策だとわかりました。

まず、仮想環境を削除します。(オプション)

find myvirtualenv -type l -delete

次に新しいvirtualenvを再作成します

virtualenv myvirtualenv

リファレンス:https : //www.jeremycade.com/python/osx/homebrew/2015/03/02/fixing-virtualenv-after-a-python-upgrade/


0

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

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

悲しいことに、解決策は、すべての仮想環境を完全に削除してゼロから再作成することです。

参考までに:

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

この解決策は時代遅れではないためだと思います-私はそれを試したところ、問題が解決しました。また、シンボリックリンクがない場合は、ここで説明するエラーは表示されないので、このコメントは解決策ではなく注意散漫になると思います-新しいバージョンを持っているからといって、すべての人がそうするわけではありません。それが私の反対だと思います:)
RafazZ

@RafazZ:私はそれが今より良いことを望みます。しかし、それがなぜあなたにとってまだシンボリックリンクであるのか疑問に思います。そして、はい、virtualenv pythonがストックpython libsに対してリンクされているため、私はそのエラーを受け取ります。
sds 16

私はデフォルトの動作はまだシンボリックリンクを作成することであり、--always-copyそれをオーバーライドするための引数が必要だと思います。少なくともユーザーガイド
RafazZ

@RafazZ:使用--always-copyしたことがなく、通常のファイルがあります:-(
sds


0

私は上位のいくつかの方法を試しましたが、トックスを機能させようとしていたため、機能しませんでした。最終的に機能したのは:

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

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

brew uninstall pipenv
brew uninstall python3
brew install python3 
brew install pipenv

0

ここですべての答えは素晴らしいです。私は、Ryan、Chrisによって上記で述べたいくつかの解決策を試してみましたが、問題を解決できなかったため、迅速かつ汚い方法に従わなければなりませんでした。

  1. rm -rf <project dir>(またはmv <project dir> <backup projct dir>バックアップを保持したい場合)
  2. git clone <project git url>
  3. 進め!

ここには目新しいものは何もありませんが、それによって生活が楽になります!


0

私はパーティーに遅れると確信していますが、この問題の解決はここで説明するよりもはるかに簡単です。

何も削除/編集しなくても、仮想環境を簡単に再生成できます。壊れた環境が呼び出されたとenv_to_fixすると、次のことができます。

mkvirtualenv env_to_fix

これにより、リンクが再生成され、現在のステータスをどこかにダンプして復元する必要なく環境が修正されます。


0

MacでPythonランタイムを2から3にポイントしているときに、エイリアスpythonからpython 3のパスをポイントしているときに同じ問題に遭遇しました。次に、新しいvirtualenvを再作成し、プロジェクトに必要なパッケージを再インストールします。私のユースケースでは、Googleシートに書き込むPythonプログラムを使用しました。python 2の実装とは異なるいくつかのパッケージをクリーンアップし、作業が再開されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.