在 Debian 上,如何將 dist-packages 中的 Python 套件加入 virtualenv 中?

在 Debian 上,如何將 dist-packages 中的 Python 套件加入 virtualenv 中?

/usr/share/pyshared/給定or中的一些 python 套件/usr/lib/pythonX.Y/dist-packages/(以python-numpyorpython-scipy為例),如何將該套件加入 virtualenv 中?

將套件新增至 virtualenv 時,是否要求使用「正常」python 安裝方法(setpy.py等)進行安裝,或有自己的安裝方法?

基本上,我希望能夠輕鬆地將具有複雜 C 擴充功能(numpyscipypyQt/pysidepygtk)的 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.inideps部分如下所示:

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 中。

相關內容