사이트 패키지가없는 우분투의 VirtualEnv
-
05-07-2019 - |
문제
나는 최근 Python에서 개발하는 동안 Virtualenv를 사용하고 있습니다. 나는-no-site-packages 옵션을 사용하여 분리 된 개발 환경에 대한 아이디어를 좋아하지만 pygtk 앱을 개발하는 동안이 작업을 수행하는 것은 약간 까다로울 수 있습니다. Pygtk 모듈은 기본적으로 Ubuntu에 설치되며 시스템의 다른 곳에 위치한 특정 모듈을 인식하는 virtualenv (-noity-site-packages 포함)를 만들고 싶습니다.
이것을하는 가장 좋은 방법은 무엇입니까? 아니면 그냥 빨아 내고--사이트 패키지 옵션을 떨어 뜨려야합니까?
해결책
$ virtualenv --no-site-packages --python=/usr/bin/python2.6 myvirtualenv
$ cd myvirtualenv
$ source bin/activate
$ cd lib/python2.6/
$ ln -s /usr/lib/pymodules/python2.6/gtk-2.0/
$ ln -s /usr/lib/pymodules/python2.6/pygtk.pth
$ ln -s /usr/lib/pymodules/python2.6/pygtk.py
$ ln -s /usr/lib/pymodules/python2.6/cairo/
$ python
>>> import pygtk
>>> import gtk
다른 팁
한 가지 방법은 sys.path를 사용하여 코드에 경로를 추가하는 것입니다.
import sys
sys.path.append(somepath)
또 다른 방법은 sys.path에 추가하는 것 외에도 .pth 파일을 처리하는 사이트를 사용하는 것입니다.
import site
site.addsitedir(sitedir, known_paths=None)
https://docs.python.org/library/site.html
그러나 당신은 아마도 이것을 모든 관련 코드에 추가하고 싶지 않을 것입니다.
나는 sitecustomize.py에 대한 언급을 보았지만 이와 같은 것을 수행하는 데 사용되는 것을 보았지만 일부 테스트 후에는 예상대로 작동 할 수 없었습니다.
여기에서는 SiteCustomize의 자동 상영이 2.5로 끝났다고 언급합니다. (Path 중 하나를 추가하여 파일에 위의 메소드를 추가하고 프로그램이 실행되는 디렉토리에 삭제하십시오.) 2.5 이상의 사용자를위한 게시물에 대한 방법이 언급되어 있습니다.
이 상황에서 Symlinks 또는 특정 파일 (패키지, 모듈, 확장)을 복사하는 것이 실제로 잘 작동합니다.
이를 통해 프로그램은 개발 환경에 맞게 응용 프로그램을 변경하는 대신 대상 환경에서 실행되는 것을 모방 할 수 있습니다.
Appengine과 같은 거래.
PostMkVirtualEnv 후크 스크립트를 확인하십시오.
https://stackoverflow.com/a/9716100/60247
이 경우 새 VirtualEnV가 생성 된 후 PYQT 및 SIP를 가져 오기 위해 사용하고 있지만 LIBS에 필요한 패키지를 추가 할 수 있습니다.
그리고 환상적이기 때문에 그 대본을 투표하십시오 :)
VirtualEnV에서 관련 시스템의 Python GTK-2.0에 대한 링크를 포함하려면 PIP를 사용하여 설치할 수 있습니다. Ruamel.venvgtk:
PIP 설치 Ruamel.venvgtk 가져 오기는 없습니다. 링크는 설치 중에 설정됩니다.
사용하는 경우 특히 편리합니다 tox
,이 경우 의존성 만 포함하면됩니다 (Tox의 경우) :
deps:
pytest
ruamel.venvgtk
새로 설정된 Python2.7 환경에는 테스트가 실행되기 전에 관련 링크가 포함됩니다.
링크 설정 방법에 대한 자세한 정보는 이 답변