virtualenv가 글로벌 사이트 패키지에서 특정 패키지를 상속 받도록하십시오.


208

기본 파이썬 설치의 일부 라이브러리 (내가 선택한)를 포함하는 virtualenv를 만드는 방법을 찾고 있습니다.

보다 구체적으로, virtualenv를 만드는 동안 matplotlib를 virtualenv로 가져 오려고합니다. 일부 포트란 컴파일러 라이브러리가 누락되어 pip 또는 easy_install을 사용하여 효율적으로 설치할 수 없습니다. 내가 지금까지 한 방법은 수동으로 복사하는 것이 었습니다.

/usr/lib/python2.7/dist-packages/ to virtualenv_name/lib/python2.7/dist-packages/

그러나 이렇게하면 수동으로 가져온 링크가 yolk (virtualv에서 현재 사용 가능한 모든 라이브러리를 인쇄 함)에 의해 등록되지 않습니다.

따라서 선택적 변형을 수행하는 방법이 있습니까?

virtualenv --system-site-packages

16
부드러운 알림-아래 중 하나가 작동하면 답변을 선택하십시오.
foobarbecue

1
지난 몇 달 동안 12 명이 테스트를 거친 것 같습니다 ...
foobarbecue

2
왜 OP를 괴롭히는가? 우리는 어느 것이 가장 인기있는 답인지 알 수 있습니다. 그가 그것을 받아 들일지 정말 중요합니까? 나는 가장 인기있는 답변을 단순히 똑딱 거리는 대신 자신을 테스트하는 그의 충절을 존경해야한다고 생각합니다.
Michael Scheper

5
2013 년 : 정답과 오답 사이의 답 점수는 매우 비슷합니다. OP는 그가 시험 할 것이라고 말한다. 2016 년 : Michael Scheper는 3 년 전 OP가 테스트 할 것이라고 매우 감동했습니다. 2017 : 나는이 질문을 다시 만나고 즐겁습니다.
foobarbecue 2012 년

2
정답이 없습니다. OP는 선택적을 요구했다 --system-site-packages. 대답은 비 선택적을 사용한 --system-site-packages다음 일부 패키지를 로컬로 오버 설치하는 것이 좋습니다.
Piotr Jurkiewicz

답변:


238

로 환경을 만듭니다 virtualenv --system-site-packages. 그런 다음, VIRTUALENV을 활성화하고 VIRTUALENV보다는 시스템 파이썬에 설치 일을 할 때, 사용 pip install --ignore-installed또는 pip install -I. 이렇게하면 시스템 전체 버전이 존재하더라도 pip는 요청한 것을 로컬에 설치합니다. 파이썬 인터프리터는 virtualenv의 패키지 디렉토리에서 가장 먼저 보이므로 해당 패키지는 전역 패키지를 가리야합니다.


45
-I를 사용하면 시스템 전체 사이트 패키지 디렉토리에 패키지가 이미 존재하더라도 패키지를 항상 다시 설치합니다. 대신 -U를 사용하면 최신 버전의 패키지가 virtualenv에 설치되지만 시스템에서 필요한 버전으로 이미 사용 가능한 패키지는 다시 설치되지 않습니다.
Danilo Bargen

15
이전에 작성된 가상 환경에서 --system-site-packages 옵션을 '활성화'하는 방법이 있는지 알고 있습니까? 모든 로컬 패키지를 다시 설치해야하는 번거 로움을 피하고 싶습니다!
가브리엘


이 답변이 매우 흥미로 웠지만 작동하지 않는 매우 이상한 경우가있었습니다. no-global-site-packages사용 가능한 virtualenv가 있습니다. 그러나 어떤 이유로 든 글로벌 시스템에서 사용되는 패키지가 있는지 알 수 없습니다. pip install -Ivirtualenv 내부에서 패키지를 사용하면 작동하지 않았습니다. 결국 virtualenv와 전역 시스템에서 패키지를 임시로 제거하고 결국 virtualenv와 시스템에 순서대로 설치할 수 있습니다. 이제는 잘 작동합니다.
kstenger

3
-1 문제는 제작을 요청 특정 하지, 패키지가 눈에 보이는 모든 그림자 패키지를 제외하고. 제한된 세트를 화이트리스트에 추가하는 것은 명시 적으로 화이트리스트에 포함 된 패키지를 제외한 모든 패키지가 venv에 있어야한다는 것을 보장하므로 모든 것을 화이트리스트에 추가하는 것보다 훨씬 안전합니다.
bluenote10

19

--system-site-packagesvirtualenv에 대한 특정 항목을 사용한 다음 "과도하게 설치" 할 수 있습니다 . 그렇게하면 virtualenv에 설치 한 모든 것이 여기에서 가져 오며 그렇지 않으면 시스템에서 가져옵니다.


확실하지 않은 것이 확실하지 않지만 시도합니다. --system-site-packages 옵션을 사용하여 virtualenv를 만들면 시스템은 먼저 virtualenv에서 패키지를 찾으려고 시도합니다. 시스템 파이썬 설치에서 찾으십시오. 거기에서도 찾지 못하면 ImportError가 발생합니다.
schacki

4
이 방법의 유일한 문제점은 이제 모든 시스템 라이브러리가 있다는 것입니다. 설치된 것을 매우 엄격하게 제어하려는 경우
Dwayne

7
확실하지 않은 것은 이것이 실제로 어떻게 가능한지입니다! myprog가 시스템에있는 --system-site-packages로 생성 된 virtualenv에 pip install myprog를 수행하면 myprog가 "과도하게 설치"되지 않습니다. myprog가 존재하고 "요구 사항이 이미 충족되었습니다"라는 메시지가 나타납니다. 그래서 ... 무슨 소리 야?
foobarbecue

-5

로 가상 환경 설치

virtualenv --system-site-packages

사용 pip install -U to install matplotlib


3
이것은 질문과 반대입니다.
Dan Getz

-7

사용할 수 있습니다 virtualenv --clear. 패키지를 설치하지 않으면 원하는 패키지를 설치하십시오.


일부 시스템 전체 패키지를 사용하는 방법에 실제 질문에 대한 답변하지 않습니다 그
MrLeeh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.