我知道的virtualenv,創建一個新的虛擬環境時,如果沒有通過--no-site-packages
說法,將在/usr/local/lib/python2.7/site-packages
與新創建的虛擬環境中鏈接包(對於Python 2.7)。在Ubuntu 12.04 LTS,我在那裏的Python 2.7軟件包可以安裝三個位置(使用默認的,Ubuntu提供的Python 2.7版安裝):如何讓virtualenv在Ubuntu上使用dist-packages?
/usr/lib/python2.7/dist-packages
:這有我的IPython中,SciPy的,numpy的,matplotlib的全局安裝 - 如果不能通過scipy stack獲得,我會發現單個安裝(以及所有依賴)時會遇到困難和耗時的軟件包。/usr/local/lib/python2.7/site-packages
:這是空的,我認爲它會保持這種方式在Ubuntu上,除非我從源代碼安裝包。/usr/local/lib/python2.7/dist-packages
:這對天文,特別是那些與PyRAF,STScI的等非常重要的地方軟件包,它們是非常困難和耗費時間的單獨安裝。
請注意,我的系統上不存在全局目錄,例如/usr/lib/python2.7/site-packages
。還要注意,我的ipython,scipy等的全局安裝允許我使用那些包即時的,而無需每次都來源/激活虛擬環境。
當然,我現在想用的virtualenv建立在我的用戶主目錄中的一個虛擬的環境,我將輸出/激活我的未來的項目。不過,我希望這個虛擬環境在創建時可以鏈接/複製上面列表中位置(1)和(3)中的所有包。主要原因是我不想通過pip install
進程(如果甚至可能的話)爲這個(也許是其他的)虛擬環境重新安裝ipython,scipy,astro-packages等。
這裏是我的問題:
- 有沒有辦法爲我指定VIRTUALENV,我想它在這兩個
dist-packages
目錄爲虛擬環境是在未來創建的鏈接/複製的包? - 當我最終更新我SciPy的,IPython中,等兩個
dist-packages
目錄的全局安裝,這將同時更新/更改我的虛擬環境使用(和它最初的virtualenv創建過程中得到)的包? - 如果我從源代碼安裝在Ubuntu軟件包,將它在
/usr/local/lib/python2.7/dist-packages
,或/usr/local/lib/python2.7/site-packages
去?
預先感謝您的幫助!
這很好,謝謝!另一種方法是創建一個[.pth](http://docs.python.org/2/install/index.html#modifying-python-s-search-path)文件,其中每行是要添加的路徑到默認的sys.path,並將該文件放置在虛擬環境的site-packages目錄中,例如'/ home/userX/envY/lib/python2.7/site-packages'中的dist-packages.pth。現在我選擇了後一種方法,因爲它更明確地說明了爲什麼這個特定的虛擬環境可以訪問全局dist-packages目錄,而不是使用.bashrc中的「global」'PYTHONPATH'環境變量。 – quantumflash
啊,那也不錯。有時我會在虛擬環境中的激活腳本中添加內容,並且可以在其中設置和取消設置PYTHONPATH,但由於.pth文件的工作原理可能更好。這是其他類似事情的好地方。 – Thomas
這很好。直到我按照這個答案規定的方式設置PYTHONPATH時,我無法從virtualenv中安裝numpy。 – Will