[python] virtualenv-사이트 패키지 없음 및 pip가 여전히 글로벌 패키지를 찾고 있습니까?

virtualenv --no-site-packages완전히 분리되고 격리 된 Python 환경을 만들 것이라는 인상을 받았지만 보이지 않습니다.

예를 들어, 전 세계에 python-django가 설치되어 있지만 다른 장고 버전으로 virtualenv를 만들고 싶습니다.

$ virtualenv --no-site-packages foo       
New python executable in foo/bin/python
Installing setuptools............done.
$ pip -E foo install Django
Requirement already satisfied: Django in /usr/share/pyshared
Installing collected packages: Django
Successfully installed Django

내가 알 수 있듯이 pip -E foo install위 의 내용은 Django의 새 버전을 다시 설치해야합니다. 또한, pip에게 환경을 동결하라고 지시하면 패키지가 많이 있습니다. 나는 --no-site-packages이것이 있는 신선한 환경 이 비어 있을 것으로 기대 합니까?

$ pip -E foo freeze
4Suite-XML==1.0.2
BeautifulSoup==3.1.0.1
Brlapi==0.5.3
BzrTools==1.17.0
Django==1.1
... and so on ...

어떻게 --no-site-packages작동 해야하는지 오해하고 있습니까?



답변

나는 (virtuenv를 발견하기 오래 전에) 내 .bashrc 파일의 PYTHONPATH에 디렉토리를 추가했다는 것을 깨달을 때까지 이와 같은 문제가있었습니다. 1 년이 지난 지금, 나는 그것을 바로 생각하지 않았습니다.


답변

pip바이너리가 아닌 가상 환경에서 바이너리를 실행하고 있는지 확인해야합니다 .

env/bin/pip freeze

테스트를보십시오 :

다음 --no-site-packages옵션을 사용하여 virtualenv를 만듭니다 .

$ virtualenv --no-site-packages -p /usr/local/bin/python mytest
Running virtualenv with interpreter /usr/local/bin/python
New python executable in mytest/bin/python
Installing setuptools, pip, wheel...done.

우리 freeze는 새로 생성 된 출력을 확인합니다 pip.

$ mytest/bin/pip freeze
argparse==1.3.0
wheel==0.24.0

그러나 global을 사용하면 다음 pip과 같은 결과를 얻습니다.

$ pip freeze
...
pyxdg==0.25
...
range==1.0.0
...
virtualenv==13.1.2

pip, 전체 시스템에 설치된 모든 패키지입니다 . 확인함으로써 which pip우리는 (적어도 나의 경우에는) 다음과 같은 것을 얻습니다 /usr/local/bin/pip. 즉, 우리가 pip freeze할 때 대신이 바이너리를 호출 한다는 것을 의미합니다 mytest/bin/pip.


답변

결국 나는 어떤 이유로 든 pip -E가 작동하지 않는다는 것을 알았습니다. 그러나 실제로 virtualenv를 활성화하고 virtualenv에서 제공하는 easy_install을 사용하여 pip를 설치 한 다음 내부에서 직접 pip를 사용하면 예상대로 작동하고 virtualenv의 패키지 만 표시합니다


답변

나는 이것이 매우 오래된 질문이라는 것을 알고 있지만 여기에 도착하는 사람들에게 해결책을 찾고 있습니다.

실행하기 전에 virtualenv ( source bin/activate) 를 활성화하는 것을 잊지 마십시오 pip freeze. 그렇지 않으면 모든 전역 패키지 목록이 표시됩니다.


답변

로 다음을 일시적으로 지 웁니다 PYTHONPATH.

export PYTHONPATH=

그런 다음 가상 환경을 작성하고 활성화하십시오.

virtualenv foo
. foo/bin/activate

그때만 :

pip freeze


답변

--no-site-packages이름에서 알 수 있듯이에서 표준 사이트 패키지 디렉토리를 제거해야합니다 sys.path. 표준 파이썬 경로에있는 다른 것은 그대로 남아 있습니다.


답변

스크립트를 직접 호출 script.py하는 경우 Windows 기본 오프너를 사용하고 가상 환경 외부에서 Python을 여는 경우 Windows에서도 비슷한 문제가 발생할 수 있습니다 . 호출 python script.py하면 가상 환경에서 Python을 사용합니다.