Virtualenvs의 깨진 참조


238

최근에 다른 응용 프로그램과 함께 Mac에 많은 도트 파일을 설치했습니다 (터미널 대신 iTerm으로 변경하고 기본 텍스트 편집기로 Sublime로 변경했습니다). 여전히 거기에 있고 아무것도 실행하려고 할 때마다 다음과 같은 오류가 발생합니다.

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

dotfile과 관련된 모든 파일을 제거하고 .bash_profile을 이전 상태로 복원했지만 문제가 지속됩니다. 문제를 진단하거나 쉽게 해결할 수있는 방법이 있습니까 (예 : 모든 가상 환경을 다시 만들 필요가 없음)?



의견 @unubtu에 감사드립니다. 이것은 확실히 도움이됩니다. 그러나 나는 또한 새로운 가상 환경을 만들 수 없습니다. 내 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 그래서, 그것은 내 파이썬 경로에 문제가 보이지만 문제는 어디 파이썬을 실행할 수 있기 때문에 내가 볼 수 있으며 잘 보인다.
oxtay

1
[업데이트] 문제를 발견했을 수도 있지만 확실하지 않으며 실제로 해결 방법을 잘 모르겠습니다. 모든 virtualenv명령이 이론적으로 작동 하는 것 같지만 파이썬에 문제가 있기 때문에 아무것도하지 않습니다. 실제 문제는 brew 's python에 있습니다. 그리고 나는 그 이유가 파이썬 디렉토리의 이름 변경 때문이라고 의심합니다. 어떤 이유로 든이 모든 명령은 폴더에서 파이썬을 찾고 /usr/local/Cellar/python/2.7.6있지만 폴더의 이름은 실제로 /usr/local/Cellar/python/2.7.6_1입니다.
oxtay

나는 초보자이기 때문에 수동으로 이름을 2.7.6_1에서 2.7.6으로 변경하고 어떤 일이 일어나는지 얼마나 위험한지 알 수 없습니다.
oxtay

로 이름 2.7.6_1을 바꿀 수 있어야합니다 2.7.6. 최악의 상황이 발생하면 이름을 바꿀 수 있습니다.
unutbu

답변:


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

GNU find가없는 경우 Homebrew와 함께 GNU 를 설치할 수 있습니다 .

brew install findutils

기본적으로 Homebrew와 함께 설치된 GNU 프로그램은 접두사가 붙는 경향이 있습니다 g. 이것은 findOS X와 ​​함께 제공 되는 바이너리를 가리지 않도록하기위한 것 입니다.


4
+1 gfind은 완벽합니다. 삭제하고 싶지 않은 많은 끊임없는 심볼릭 링크 (예 : nodeenv)가 있었기 때문에
2Toad

3
깨진 심볼릭 링크를 제거하는 또 다른 방법은 표준 찾기를 사용하는 것입니다.find -L ~/.virtualenvs/my-virtual-env/ -type l | xargs rm
vdboor

전체 virtualenv 디렉토리를 삭제했습니다. 이제 심볼릭 링크를 제거 할 수 없습니다. 이 페이지에서 언급 한 솔루션 중 일부는 Mac에서 작동합니다. 난 여전히 같은 오류가 "이미지를 찾을 수 없습니다 중단 트랩 : 6."
아심

이 단계는 저에게 효과적이지 않았습니다.pip3 freeze dyld: lazy symbol binding failed: Symbol not found: __Py_UnixMain
deed02392

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

그런 다음 venv를 다시 빌드하려면 다음을 실행하십시오.

virtualenv .
workon name_of_broken_venv
pip freeze

이제 설치된 패키지 목록이 다시 나타납니다.


FWIW, El Capitan으로 업그레이드하고 homebrew를 다시 설치 한 후이 방법을 시도했지만 패키지 목록이 유지되지 않았습니다.
Ryan

1
pipenv를 사용하면 다음을 수행 pipenv --rm하고 다시 만들어 제거 할 수 있습니다 pipenv shell.pipenv install
Harry Moreno

14

Snow Leopard에서 Mac OS X Mavericks로 업데이트했을 때 발생했습니다. 사전에 추출을 다시 설치해야했습니다. 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

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
이것은 완벽을 넘어선 것입니다. 모든 패키지를 유지하면서 파이썬 버전을 마이그레이션 할 수 있습니다. 이 지침을 따르는 경우 @Chris Wedgewood의 지침을 실행하지 마십시오.
Harish Prasanna 2016 년

10

나타납니다 이 문제를 실행하는 것입니다 해결하기 위해 적절한 방법을

 pip install --upgrade virtualenv

Homebrew로 파이썬을 업그레이드 한 후.

이것은 자체 패키지 관리 시스템을 가진 파이썬과 같은 것을 설치하는 모든 공식의 일반적인 절차입니다. 당신이 설치할 때 brew install python, 당신은 설치 pythonpipeasy_installvirtualenv등등. 따라서 해당 도구를 자체 업데이트 할 수있는 경우 Homebrew를 문제의 원인으로 찾기 전에 확인하는 것이 가장 좋습니다.


경고 : setuptools == 0.6c12dev-r88846의 svn 위치를 찾을 수 없음
Robert Brisita

1
이 솔루션을 적용한 다음 virtualenv . 깨진 가상 환경에서 다음을 실행 했습니다. virtualenv그런 다음 업데이트 된 버전은 필요한 종속성을 다시 작성했으며 나아갔습니다. 이 프로세스는 내가 받아 들인 대답보다 더 자체 관리되고 강력했습니다.
christang 2016 년

2020 년에도 이것이 정답입니다.
scubabuddha

7

이것이 brew upgrade파이썬을 업그레이드 한 것으로 인해 발생 하고 이전 버전으로 다운 그레이드하면 괜찮습니다 ( brew switch python [previous version]예 :) brew switch python 3.6.5. 여기에서.


4

virtualenvwrapper 지침

허용 된 답변에 표시된 것처럼 근본 원인은 가상 업데이트로 인해 가상 환경 심볼릭 링크가 깨진 파이썬 경로를 가리키고 있음을 의미합니다 . 자세한 내용은 여기를 참조 하십시오 .

각 가상 환경에 대해 올바른 python 경로 (Brew 지하실)를 가리 키도록 심볼릭 링크를 다시 할당해야합니다. 다음은 virtualenvwrapper 로 수행하는 방법 입니다. 여기에서는 "my-example-env"라는 가상 환경을 업데이트하고 있습니다.

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

다 했어요


4

pipenv 를 사용하는 사람이라면 누구나 venv를 활성화하지 않고도이 두 명령을 간단히 사용할 수 있습니다.

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

1
당신은 또한 pipenv --rm당신의 환경의 폴더에서 다음 사용할 수 있습니다pipenv install --dev
Handfeger

2

python3을 파열 한 경우 brew upgrade python3고정시켜보십시오.


2

나는 최근에 이것을 직면했다. 위의 해결책 중 어느 것도 나를 위해 일하지 않았습니다. 실제로 파이썬의 문제가 아닌 것 같습니다. 실행 중

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

파이썬 사용하기 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

나는 파이썬의 Homebrew 재설치 (따라서 심볼릭 링크가 끊어짐)와 이전에했던 몇 가지 "스도 핍 설치"로 인해 가상 환경이 손상되었습니다. Weizhong의 팁은 패키지를 다시 설치할 필요없이 문제를 해결하는 데 매우 유용했습니다. 혼합 권한 문제에 대해 다음을 수행해야했습니다.

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


다른 사용자의 답변을 보완하는 경우 편집 할 수 있도록 댓글을 남겨야합니다! 좋은 기여.
Francisco Peters

그는 답변에 대해 언급 할만한 평판이 충분하지 않습니다.
Tyler Smith

1

Virtualenvs가 고장났습니다. 때로는 간단한 방법은 venv 폴더를 삭제하고 virutalenvs를 다시 만드는 것입니다.



1

OSX Catalina에서 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

이 솔루션이 더 이상 사용되지 않기 때문입니다. 방금 시도했지만 문제가 해결되었습니다. 또한 심볼릭 링크가 없으면 여기에 설명 된 오류가 표시되지 않으므로이 의견은 해결책이 아니라 산만 해집니다. 새로운 버전이 있다고해서 모든 사람이 그런 것은 아닙니다. 그건 왜 downvote :)
RafazZ

@ RafazZ : 이제 더 나아지기를 바랍니다. 그러나 왜 그것이 여전히 당신에게 심볼릭 링크인지 궁금합니다. 그리고 네, virtualenv 파이썬이 스톡 파이썬 라이브러리에 연결되어 있기 때문에 오류가 발생합니다.
sds

기본 동작은 여전히 ​​심볼릭 링크를 만드는 것이며 --always-copy이를 무시 하려면 인수가 필요하다고 생각합니다 . 적어도 내가 사용 설명서
RafazZ

@ RafazZ : 나는 결코 사용하지 않고 --always-copy일반 파일이 있습니다 :-(
sds


0

나는 최고의 몇 가지 방법을 시도했지만 독소를 작동 시키려고 노력했지만 나에게 효과가 없었습니다. 결국 효과가 있었던 것은 :

sudo pip install 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

내 파이썬에서 파이썬 실행 시간을 2에서 3으로 가리키고 별칭 파이썬을 파이썬 3 경로로 가리킬 때 같은 문제가 발생했습니다. 그런 다음 새 virtualenv를 다시 작성하고 프로젝트에 필요한 패키지를 다시 설치하십시오. 내 유스 케이스의 경우 Google 시트에 파이썬 프로그램을 작성했습니다. python 2 구현과 다른 패키지를 정리하고 작업을 다시 시작하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.