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을 사용합니다.