
/usr/share/pyshared/
給定or中的一些 python 套件/usr/lib/pythonX.Y/dist-packages/
(以python-numpy
orpython-scipy
為例),如何將該套件加入 virtualenv 中?
將套件新增至 virtualenv 時,是否要求使用「正常」python 安裝方法(setpy.py
等)進行安裝,或有自己的安裝方法?
基本上,我希望能夠輕鬆地將具有複雜 C 擴充功能(numpy
、scipy
、pyQt/pyside
等pygtk
)的 python 套件添加到 virtualenv 中。
答案1
正如您所指出的,製作輪子通常是最好的,特別是如果您定期重新安裝的話。
對於 python 的 gtk 綁定,這對我來說不起作用,我需要某種方法來測試程式碼tox
(它使用 --no-site-packages 為您建立 virtualenvs)。出於測試目的,(對我來說)連結相關係統安裝的版本就足夠了,但不是site-packages
/中的所有內容dist-packages
。
為此,我創建了一個可安裝套件(ruamel.venvgtk
),在基於 Debian 的系統(Ubuntu、Linux Mint)上為 Python2.7 和 Python3.4 設定正確的連結。它在程式設定期間執行此操作,因此無需更改程式。文件tox.ini
的deps
部分如下所示:
deps =
pytest
ruamel.venvgtk
對於創建的任何 virtualenvpip
將安裝ruamel.venvgtk
並建立相關連結。
答案2
是的,當您的 virtualenv 處於活動狀態時,您需要使用 distutils “正常”Python 安裝方法 ( python setup.py install
) 或使用 virtualenv 感知工具(例如pip install package
)來安裝所需的套件。
您安裝的軟體包版本將會是 virtualenv 的活動軟體包版本。使用virtualenv MY_ENV
或建立 virtualenv 並不重要virtualenv --no-site-packages MY_ENV
。在第一種情況下,系統 Python 中安裝的所有軟體包都將在 virtualenv 中可用,但是當 virtualenv 處於活動狀態時,您在 virtualenv 中安裝的任何軟體包都會屏蔽系統 Python 中的版本。在第二種情況下,您將在 virtualenv 中擁有一個隔離的 Python 環境,其中僅包含標準庫包和您在其中安裝的任何內容。
請注意,像 Numpy 和 Scipy 這樣的軟體包不提供 Linux 上的預先建置二進位文件,因此,如果您不想使用軟體包管理器提供的版本,則需要自己輕鬆建立它們。
答案3
我想,由於這個問題已經一年多沒有任何活動了(截至 2014 年 3 月),沒有人有答案,所以我將寫下我是如何解決這個問題的。
對於來源安裝方法遵循 virtualenvs(numpy/scipy、pyside)的軟體包,請使用wheels 以避免在每個 venv 中重建。
對於不支援 GTK 的軟體包,這取決於它們如何掛接到 python 中。