我认为这没有什么区别,但我使用的是Python2.7。
因此,我的问题的一般部分如下:我对每个项目使用单独的virtualenv
。我没有管理员权限,也不想破坏系统安装的软件包。当然,我想使用wheel s来加速跨virtualenv
s的包升级和安装。如何构建一个只在特定的virtualenv
中满足依赖关系的wheel?
具体来说,发行
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
不是全局存在的,并且当安装了numpy
的virtualenv
处于活动状态时,在构建轮子时,让轮子依赖于特定的virtualenv
版本的numpy
似乎是一个可怕的想法。
也依赖于numpy
的pandas
似乎安装了自己的numpy
组件,但我不确定这是最好的解决方案。
我可以用--user
安装numpy
,并用它来构建scipy
轮子。有更好的选择吗?
问题描述
scipy
),它依赖于其他包(比如numpy
),但是setup.py
没有声明这个需求/依赖。注意:理想的解决方案是通过添加所需的包声明来更正损坏的
setup.py
。但这基本上是不可行的,我们必须走另一条路。解决方案:首先安装所需的软件包
这个过程(用于安装需要
scipy
的numpy
)有两个步骤用你需要的轮子填充驾驶室
这只需要做一次,然后可以重复使用多次。
已正确配置pip配置,以便允许从wheels进行安装,已设置wheelhouse目录并与
download-cache
和find-links
重叠,如下例pip.conf
:为所有必须编译的软件包安装所有必需的系统库
为所需的包(
numpy
)生成一个轮子设置virtualenv(只需要一次),激活它并在那里安装
numpy
:当轮子准备好时,它应该很快。
为
scipy
构建一个轮子(仍在virtualenv中)到现在为止,你的驾驶室会装上你需要的轮子。
您可以删除临时的virtualenv,不再需要它。
安装到fresh virtualenv中
我假设,您已经创建了新的virtualenv,激活了它并希望在那里安装
scipy
。直接从新的
scipy
控制盘安装scipy
仍然会在缺少numpy
时失败。我们先安装numpy
来克服这个问题。然后用scipy结束
我想,这可以在一个电话里完成(但我没有测试)
重复安装已验证版本的
scipy
很有可能,在未来的某个时刻,新版本的
scipy
或numpy
将被发布,而pip将尝试安装最新版本,而您的驾驶室中没有轮子。如果您可以使用到目前为止使用的版本,那么您应该创建声明您喜欢的
numpy
和scipy
版本的requirements.txt
,并从中安装。这将确保所需的包装在实际使用之前就已存在。
相关问题 更多 >
编程相关推荐