[python] Virtualenvs의 깨진 참조

최근에 다른 응용 프로그램과 함께 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을 이전 상태로 복원했지만 문제가 지속됩니다. 문제를 진단하거나 쉽게 해결할 수있는 방법이 있습니까 (예 : 모든 가상 환경을 다시 만들 필요가 없음)?



답변

여기서 문제에 대한 해결책을 찾았 으므로 모든 크레딧은 저자에게 전달됩니다.

요점은 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와 ​​함께 제공 되는 바이너리를 가리지 않도록하기위한 것 입니다.


답변

몇 가지를 시도한 후에 이것은 나를 위해 일했습니다.

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

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


답변

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

이전과 같이 프로젝트를 종료해야합니다.


답변

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


답변

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

 pip install --upgrade virtualenv

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

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


답변

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


답변

virtualenvwrapper 지침

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

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

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

다 했어요