我认为这并没有什么不同,但我使用的是Python 2.7。
因此,我的问题的一般部分如下:我为每个项目使用单独的virtualenv
。我没有管理员权限,我也不想搞乱系统安装的软件包。当然,我想使用轮子来加速virtualenv
的包升级和安装。如何构建一个仅在特定virtualenv
内符合依赖关系的轮子?
具体来说,发布
pip wheel -w $WHEELHOUSE scipy
失败
Building wheels for collected packages: scipy
Running setup.py bdist_wheel for scipy
Destination directory: /home/moritz/.pip/wheelhouse
Complete output from command /home/moritz/.virtualenvs/base/bin/python -c "import setuptools;__file__='/home/moritz/.virtualenvs/base/build/scipy/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /home/moritz/.pip/wheelhouse:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/moritz/.virtualenvs/base/build/scipy/setup.py", line 237, in <module>
setup_package()
File "/home/moritz/.virtualenvs/base/build/scipy/setup.py", line 225, in setup_package
from numpy.distutils.core import setup
ImportError: No module named numpy.distutils.core
----------------------------------------
Failed building wheel for scipy
Failed to build scipy
Cleaning up...
因为numpy
并非全局存在,而且当安装virtualenv
numpy
的{{1}}处于活动状态时构建轮子时,将轮子依赖于特定的轮子似乎是一个可怕的想法virtualenv
的{{1}}版本。
numpy
的 pandas
似乎安装了numpy
自己的组件,但我不确定这是否是最佳解决方案。
我可以使用numpy
安装numpy
并使用它来构建--user
轮。有更好的选择吗?
答案 0 :(得分:15)
scipy
),它依赖于其他包(如numpy
),但setup.py
未声明该要求/依赖。注意:理想的解决方案是通过添加必需的包声明来纠正损坏的setup.py
。但这基本上是不可行的,我们必须采取另一种方式。
程序(用于安装需要scipy
的{{1}})有两个步骤
这只需要进行一次,然后可以多次重复使用。
已正确配置pip配置,以便允许从轮子安装,设置wheelhouse目录并与numpy
和download-cache
重叠,如下面的find-links
示例所示:< / p>
pip.conf
为所有必须编译的软件包安装所有必需的系统库
为所需的包([global]
download-cache = /home/javl/.pip/cache
find-links = /home/javl/.pip/packages
[install]
use-wheel = yes
[wheel]
wheel-dir = /home/javl/.pip/packages
)
numpy
设置virtualenv(只需要一次),激活它并安装$ pip wheel numpy
:
numpy
当车轮准备就绪时,应该很快。
为$ pip install numpy
构建一个轮子(仍然在virtualenv中)
scipy
到现在为止,您的驾驶室将装满您需要的轮子。
您可以删除临时virtualenv,不再需要它。
我假设,你已经创建了新的virtualenv,激活它并希望在那里安装$ pip wheel scipy
。
直接从新scipy
轮安装scipy
仍然会因缺少scipy
而失败。我们首先安装numpy
来克服这个问题。
numpy
然后用scipy结束
$ pip install numpy
我想,这可以在一次通话中完成(但我没有测试)
$ pip install scipy
$ pip install numpy scipy
很可能,在将来的某个时刻,scipy
或scipy
的新版本将被释放,而pip将尝试安装最新版本,而您的驾驶室中没有轮子。
如果您可以使用目前使用的版本,则应创建numpy
,说明您喜欢的版本requirements.txt
和numpy
并从中安装。
这将确保在真正使用之前存在所需的包装。