2015-09-07 88 views
0

我正在使用Ubuntu 14.04。我有一個腳本取決於pynotify。當腳本運行在任何虛擬環境之外時,它運行良好(其他依賴關係也是全局安裝的),但是如果我在任何虛擬環境(安裝了其他依賴項)內運行相同的腳本,則不起作用。
然後我以爲我早就將它安裝了,但事實並非如此。我試過這個(全球):無法在virtualenv中導入pynotify

pip freeze | grep pynotify 

但是,它沒有給出任何結果。這種行爲有沒有解釋?

回答

1

更新您的virtualenv環境,包括系統站點包

mkvirtualenv --system-site-packages your_virtual_env_name 

如果建立與virtualenv --system-site-packages ENV,您 虛擬環境將 /usr/lib/python2.7/site-packages(或其它地方全局 網站繼承包-packages目錄是)。

如果您擁有對全球站點包 目錄的控制權,並且您希望依賴其中的軟件包,則可以使用此功能。如果您想從全局系統中分離出 ,請不要使用此標誌。

來源:https://virtualenv.pypa.io/en/latest/userguide.html#the-system-site-packages-option

+0

它的工作原理。但是,這不違背工作virtualenv應該做的嗎?它正在使用已經在全球範圍內安裝的所有東西,那麼它有什麼幫助?我的意思是,沒有venv我們可以做同樣的事,對吧?通常,我們使用'pip freeze'生成'requirements.txt'文件並與其他人共享依賴關係,但在這種情況下,它將包含許多與此項目無關的內容。有沒有辦法只包括與需求相關的東西? –

+0

__「使用--no-site-packages選項運行virtualenv將不包含全局安裝的軟件包,這對於保持軟件包列表清潔以防需要稍後訪問它很有用。 virtualenv 1.7及更高版本。「__來源:http://docs.python-guide.org/en/latest/dev/virtualenvs/#other-notes –

+0

默認情況下,virtualenv會給你一個乾淨的環境,沒有安裝軟件包,也不會使用您的全球安裝軟件包。如果你想在你的項目中使用pynotify,我們的想法是在乾淨的環境下使用pip明確地和單獨地將pynotify安裝到該項目中,而不是使用已經安裝在系統上的全局包。 –