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