簡體   English   中英

為什么我的virtualenv的pip列表包在我的lib / python2.7目錄中?

[英]Why is my virtualenv's pip listing packages in my lib/python2.7 directory?

在我的家中,我有一個名為lib/python2.7的目錄(對於不同的python版本,實際上有五個目錄)。 由於這是一個共享托管( Webfaction ),因此該目錄對我而言至關重要。 在那里,我安裝了諸如virtualenvvirtualenvwrapper類的東西,因為作為共享主機的客戶,我無權訪問sudo和安裝全局軟件包。

但是,當我創建一個virtualenv時:

$ mkvirtualenv myenvironment
$ workon myenvironment
$ which pip
# outputs the myenvironment's path to pip
$ pip freeze

該命令在我的lib/python2.7下顯示了整個軟件包列表(這包括相同的virtualenv軟件包,以及由於……傳統……原因而導致的沖突軟件包)。 如果我要安裝一個軟件包(它是lib/python2.7中的軟件包的名稱),這也讓我lib/python2.7因為它不允許我對其進行更新。

workon環境中,我嘗試檢查PYTHONPATH是否具有奇怪的內容,但是它是空的:

$ echo $PYTHONPATH
# shows a blank line

如果我在任何虛擬環境中嘗試執行該命令,則它也是空的。

似乎--no-site-packages是默認的,但只能解決部分問題。 這意味着: pip freeze | wc -l 在任何環境中, pip freeze | wc -l在環境中顯示的值要小於全局執行時的值,這告訴我,某些已提供的軟件包已被排除在主機之外(而我卻未安裝,因為,再次,托管是共享的 ,我無法訪問全局空間)。

我的問題是:我該如何解決? 我希望我的virtualenv不在$HOME/lib/python2.7列出軟件包

請避免對此問題進行重復鏈接,那里沒有任何用處,但仍然沒有可接受的答案。 在閱讀並嘗試了該問題的每個解決方案后,我寫了這個問題

我認為您需要指定python版本。 您可以使用以下命令指定要用於創建虛擬環境的python版本

virtualenv -p /usr/bin/python3.4 virt/virtname --no-site-packages

因為當您不指定python版本時,virtualenv會使用pythonv2.7創建一個環境,因此所有軟件包最終都位於您提到的文件夾中。

經過深入挖掘,找到了解決方案。 這是一個Webfaction定制,但是如果出現問題,則可以將其應用於任何此類安裝。

問題的核心是Webfaction為我們配置了一個sitecustomize.py文件 該文件位於/usr/local/lib/pythonX.Y/sitecustomize.py並自行添加~/lib/pythonX.Y的內容(如果有工作,則有條件地添加~/webapps下任何python應用程序的內容在其目錄下運行python腳本)。

即使virtualenv的python可執行文件是一個不同的文件,它也會每次像基本python可執行文件一樣運行時加載所述sitecustomize.py文件。

解決方法在這里? 在virtualenv中創建一個空的sitecustomize.py以覆蓋另一個:

touch ~/.virtualenvs/yourvenv/lib/pythonX.Y/sitecustomize.py

它將起作用。 如果您像我一樣被困在這里,可以以此為參考

注意 :將每種情況下的XY替換為您正在使用的相應版本。 另外請記住: 在這種情況下,您不能刪除或編輯基本sitecustomize.py,因為您位於共享主機中。 但是,只要您對所需的每個virtualenv都執行覆蓋,則覆蓋將適用於每種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM