![](/img/trans.png)
[英]Ubuntu + virtualenv = a mess? virtualenv hates dist-packages, wants site-packages
[英]Virtualenv on Ubuntu with no site-packages
我最近在使用python進行開發時一直在使用virtualenv。 我喜歡使用--no-site-packages選項的隔離開發環境的想法,但在開發PyGTK應用程序時這樣做可能有點棘手。 默認情況下,PyGTK模塊安裝在Ubuntu上,我想讓virtualenv(使用--no-site-packages)知道位於系統其他位置的特定模塊。
最好的方法是什么? 或者我應該吮吸它並刪除--no-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)
另一種方法是使用site,除了添加到sys.path之外,還處理.pth文件。
import site
site.addsitedir(sitedir, known_paths=None)
https://docs.python.org/library/site.html
但您可能不希望將此添加到所有相關代碼中。
我已經看到提到sitecustomize.py用於執行這樣的事情,但經過一些測試后我無法按預期工作。
在這里,它提到sitecustomize.py的自動導入以2.5結尾,如果你沒有在2.5上嘗試它。 (只需將上面的路徑添加方法之一添加到文件中並將其放在程序運行的目錄中)在2.5及以上的用戶的帖子中提到了一種解決方法。
在這里查看postmkvirtualenv鈎子腳本:
https://stackoverflow.com/a/9716100/60247
在這種情況下,他在創建新的Virtualenv后使用它來導入PyQt和SIP,但是您可以將所需的包添加到LIBS。
投票那個劇本,因為它太棒了:)
我發現在這種情況下,符號鏈接,甚至復制特定文件(包,模塊,擴展)都能很好地工作。
它允許程序模擬在目標環境中運行,而不是更改應用程序以適應開發環境。
像AppEngine這樣的東西相同。
如果你想在virtualenv中包含相關系統的python gtk-2.0的鏈接,你可以使用pip來安裝ruamel.venvgtk :
pip install ruamel.venvgtk你沒有導入任何東西,鏈接是在安裝過程中設置的。
如果您使用tox
,這尤其方便,在這種情況下,您只需要包含依賴項(對於tox):
deps:
pytest
ruamel.venvgtk
並且新設置的python2.7環境將在運行測試之前包含相關鏈接。
有關如何設置鏈接的更多詳細信息,請參閱此答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.