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


136

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작동 해야하는지 오해하고 있습니까?


4
참고로, --no-site-packages 는 더 이상 사용되지 않습니다. 여기 참조
Salem Ben Mabrouk

@SalemBenMabrouk 링크가 끊어졌습니다 . 여기에 새로운 링크가 있습니다. Github 관련 문제 : '--no-site-packages'플래그가 최근에 사라 졌습니까?
Ynjxsjmh

이 링크에서 --no-site-packagesDEPRECATED 라고 표시 됩니다. 이전 버전과의 호환성을 위해서만 유지됩니다. 전역 사이트 패키지에 액세스 할 수 없는 것이 기본 동작 입니다. 글로벌 사이트 패키지에 액세스하려면을 활성화 할 수 있습니다 --system-site-packages.
Ynjxsjmh

답변:


107

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


12
내 영웅! 이것이 실제로 문제인지 빠르게 확인하려면 printenv를 실행하여 PYTHONPATH가 있는지 확인하고 있으면 PYTHONPATH를 설정 해제하십시오. 더 이상 문제가 발생하지 않게하려면 문제를 계속 추적해야하지만 현재 셸 세션에서 새로운 virtualenv를 설정할 수 있습니다.
UltraBob

Homebrew도이 작업을 수행합니다!
Rob

1
나는 당신에게 더 많은 투표를 할 수 있기를 바랍니다. 내 PYTHONPATH가 이미 설정되어 있기 때문에 물건을 만난 후이 페이지에 두 번 이상 왔습니다.
Bemmu

나는 이것이 정말로 (정말) 오래된 게시물이라는 것을 알고 있지만, SO에 대한 내 자신의 질문을 포함하여 모든 곳을 검색했으며, --no-site-packages일하는 방법을 알 수 없습니다 . 우분투를 지우고 문제가 해결되는지 확인하고 있습니다. 처음에는 동일한 PYTHONPATH 문제가 있다고 생각했지만 running printenv에서는 볼 수 없습니다. 좌절감이 커지고 있으며 도움을 주시면 감사하겠습니다. 로 작성된 venv 내부의 sys.path --no-site-packages는 모든 패키지 디렉토리를 포함 하는 것으로 보입니다. 나는 이것을 수정하는 가장 안개 낀 방법이 아닙니다. 도움?
NotAnAmbiTurner

PATHvirtualenv 외부에서도 실행 파일을 찾을 경우 전역 변수 에도 적용 할 수 있습니다.
enderland

27

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 freeze를 호출하면 올바른 패키지가 표시 되었기 때문에 어떻게되었는지 궁금합니다. 그러나 며칠 후 / usr / local / bin /에 위치한 패키지를 호출하기 시작했습니다.
jimijazz

1
이것은 나에게 문제가되었다. 나는 pipvirtualenv를 활성화 할 때 재정의되지 않은 전역 pip의 특정 경로로 별칭 을 지정 했다.
merlinND

1
당신은 저를 구했고, 이것은 나를 위해 잘 작동했습니다 (pip3 & python3.7) 감사합니다
Saed Yousef

24

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


2
FWIW, 현재 트렁크 버전의 pip 및 virtualenv를 사용하면 원래 워크 플로가 올바르게 작동합니다. 즉, 개인적으로 여전히 -E를 피하고 각 virtualenv에 pip를 설치하십시오.
Carl Meyer

17

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

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


virtualenv와 함께 소스를 사용해야하지만 virtualenvwrapper가 아닌 pip freeze에 대해 들어 본 적이 없다는 것을 알고 있습니다. 다시 한번 감사드립니다
Deepend

올바른 답변. virtualenv를 초기화 한 후에는이를 활성화해야합니다. 그렇지 않으면 시스템 버전의 python을 사용하게됩니다
AsAP_Sherb

16

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

export PYTHONPATH=

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

virtualenv foo
. foo/bin/activate

그때만 :

pip freeze

15

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


1
나를 위해 청소 하는 것은 트릭을 PYTHONPATH하는 export PYTHONPATH=것처럼 보였다.
juniper-

4

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


스크립트 상단에 '! #'로 시작하는 shebang 줄이 있어야 해석되는 e를 가리킬 수 있습니다.
wobbily_col

2

또한 virtualenv 디렉토리를 다른 디렉토리 (Linux의 경우)로 이동하거나 상위 디렉토리의 이름을 바꾸는 경우에도 발생합니다.


1

나는이 같은 문제가 발생했습니다. 나 (Ubuntu에서)의 문제는 내 경로 이름에 포함되어 있다는 것 $입니다. $ dir 외부에서 virtualenv를 만들면 정상적으로 작동했습니다.

기묘한.


1

virtualenv pip가 작동하지 않는 가능한 이유 중 하나는 상위 폴더 중 하나에 이름을 /Documents/project name/app 바꾸는 공간이있어 /Documents/projectName/app문제 를 해결할 수 있기 때문입니다.


1

venv의 pip가 여전히 글로벌 pip로 작동하는 것과 동일한 문제가 발생했습니다.
많은 페이지를 검색 한 후이 방법으로 알아냅니다.
1. "--no-site-packages"옵션을 사용하여 virtualenv로 새 venv를 작성하십시오.

virtualenv --no-site-packages --python=/xx/xx/bin/python my_env_nmae

virtualenv의 doc 파일에서 "--no-site-packages"옵션이 1.7.0부터 기본적으로 적용되었지만 수동으로 설정하지 않으면 작동하지 않습니다. 순수한 venv를 얻으려면이 옵션을 2로 설정하는 것이 좋습니다. 만든 새 환경을 활성화하십시오.

source ./my_env_name/bin/activate
  1. 핍 위치와 파이썬 위치를 확인 하고이 두 명령이 가상 환경에 있는지 확인하십시오
pip --version
which python
  1. 가상 환경에서 pip를 사용하여 전역 패키지 상호 작용이없는 패키지를 설치하십시오.
pip install package_name

이 답변이 도움이 되길 바랍니다!


0

다음은 모든 pip 설치 옵션 목록입니다. ' -E'옵션을 찾지 못했습니다 . 이전 버전이있을 수 있습니다. 아래에서 나는 평범한 영어 사용법을 공유 virtualenv하고 다가오는 SO 사용자 를 위해 노력하고 있습니다.


모든 것은 괜찮아 보입니다 . virtualenv( foo) 활성화를 수락하십시오 . 모든 것은 파이썬 환경, 다양한 장고 버전 또는 다른 파이썬 패키지와 같이 여러 가지 (그리고 다양한) 파이썬 환경을 가질 수 있도록 해줍니다. 우리가 이전 버전의 프로덕션을 가지고 있고 최신 장고 릴리스를 테스트하려는 경우 신청.

간단히 말해서 가상 환경 ( virtualenv)을 생성하고 사용 하면 다른 Python 인터프리터 (예 : Python 2.7 및 3.3)로 응용 프로그램 또는 간단한 Python 스크립트를 실행하거나 테스트 할 수 있습니다-새로 설치 ( --no-site-packages옵션 사용 ) 또는 기존의 모든 패키지 / 마지막 설정 ( --system-site-packages옵션 사용 ). 사용하려면 활성화해야합니다.

$ pip install django전역 사이트 패키지에 설치하고 유사하게 pip freeze전역 사이트 패키지의 이름을 지정합니다.

venv dir (foo) 내부에서 실행 $ source /bin/activate하면 venv가 활성화됩니다. 이제 pip로 설치된 모든 항목은 가상 환경에만 설치되며 pip freeze 만 전역 사이트 패키지 파이썬 패키지 목록을 제공하지 않습니다. 활성화되면 :

$ virtualenv --no-site-packages foo       
New python executable in foo/bin/python
Installing setuptools............done.
$ cd foo
$ source bin/activate 
(foo)$ pip install django

(foo)$서명 하기 전에 가상 파이썬 환경을 사용하고 있음을 나타냅니다. 즉 pip-install, freeze, uninstall은 venv로 제한되며 전역 / 기본 Python 설치 / 패키지에는 영향을 미치지 않습니다.

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