2008-10-30 44 views
24

我一直在使用virtualenv,而在Python開發。我喜歡使用--no-site-packages選項的隔離開發環境的想法,但在開發PyGTK應用程序時這麼做會有點棘手。 PyGTK模塊默認安裝在Ubuntu上,我想讓virtualenv(使用--no-site-packages)知道位於系統其他位置的特定模塊。Ubuntu上的Virtualenv沒有網站包

這樣做的最好方法是什麼?或者我應該把它吮吸並丟棄--no-site-packages選項?

回答

34
$ 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 
4

一種方法是使用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.py的自動導入以2.5結尾,如果你不在2.5上試用它。 (只需將上面的路徑添加方法之一添加到文件並將其放到您的程序運行的目錄中) 2.5和更高版本的用戶在帖子中提到了解決方法。

http://code.activestate.com/recipes/552729/

1

,我覺得在這種情況下,符號鏈接,甚至抄襲特定的文件(包,模塊,擴展)的作品真的很好。

它允許程序模擬在目標環境中運行,而不是改變應用程序以適應開發環境。

對於像AppEngine這樣的東西同樣如此。

+0

星爺發現的更多詳細信息,但符號鏈接在哪裏?我需要什麼來符號鏈接像PyGTK的東西? – 2008-10-30 14:29:15

+0

鏈接到您的網站包。在我的Ubuntu上,我有/usr/lib/python-support/python-gtk2/python2.5/gtk-2.0/gtk。已經有/var/lib/python-support/python2.5/gtk-2.0/gtk鏈接。 看起來像一個好的開始,你可能需要試驗和錯誤。但是你可以在下一次編寫腳本。 – 2008-10-31 01:41:06

1

退房的postmkvirtualenv鉤子腳本在這裏:

https://stackoverflow.com/a/9716100/60247

在這種情況下,他用它來導入PyQt的,並創建一個新的VIRTUALENV後SIP,但你可以添加軟件包你需要LIBS。

,如果你想包括在virtualenv中的鏈接到相關係統的蟒蛇GTK的2.0表決該腳本,因爲它是太棒了:)

0

,你可以使用畫中畫安裝ruamel.venvgtk

pip install ruamel.venvgtk 您沒有任何導入,鏈接在安裝過程中設置。

,這是特別方便,如果你使用的是tox,在這種情況下,你只需要包括的依賴(對於TOX):

deps: 
    pytest 
    ruamel.venvgtk 

和新設置的python2.7環境將有包括相關鏈接在測試運行之前。

就如何鏈接設置可以在this answer

相關問題