Python 为缺少依赖项声明的包(如scipy)构建控制盘
我认为这没有什么区别,但我使用的是Python2.7 因此,我的问题的一般部分如下:我为我的每个项目使用一个单独的Python 为缺少依赖项声明的包(如scipy)构建控制盘,python,scipy,pip,virtualenv,python-wheel,Python,Scipy,Pip,Virtualenv,Python Wheel,我认为这没有什么区别,但我使用的是Python2.7 因此,我的问题的一般部分如下:我为我的每个项目使用一个单独的virtualenv。我没有管理员权限,我也不想弄乱系统安装的软件包。当然,我想使用wheels来加速整个virtualenvs的软件包升级和安装。如何构建其依赖关系仅在特定的virtualenv中满足的控制盘 具体来说,发行 pip wheel -w $WHEELHOUSE scipy 失败于 Building wheels for collected packages: sci
virtualenv
。我没有管理员权限,我也不想弄乱系统安装的软件包。当然,我想使用wheels来加速整个virtualenv
s的软件包升级和安装。如何构建其依赖关系仅在特定的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...
为收集的包构建控制盘:scipy
为scipy运行setup.py b列表\u控制盘
目的地目录:/home/moritz/.pip/wheelhouse
从命令/home/moritz/.virtualenvs/base/bin/python-c“导入setuptools;uu文件uu='/home/moritz/.virtualenvs/base/build/scipy/setup.py';exec(编译(打开(uu文件u).read().replace('\r\n','\n'),u文件u,'exec'))”bdist wheel-d/home/moritz/.pip/wheelhouse:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/moritz/.virtualenvs/base/build/scipy/setup.py”,第237行,在
安装程序包()
文件“/home/moritz/.virtualenvs/base/build/scipy/setup.py”,第225行,在setup\u包中
从numpy.distutils.core导入设置
ImportError:没有名为numpy.distutils.core的模块
----------------------------------------
无法为scipy构建控制盘
未能生成scipy
清理。。。
由于numpy
不是全局存在的,并且当安装了numpy
的virtualenv
处于活动状态时,构建控制盘工作,因此让控制盘依赖于特定的virtualenv
版本的numpy
似乎是个糟糕的主意
pandas
也依赖于numpy
似乎安装了自己的numpy
组件,但我不确定这是最好的解决方案
我可以使用--user
安装numpy
,并使用它来构建scipy
控制盘。有更好的选择吗?问题描述
- 拥有一个python包(比如
),它依赖于其他包(比如scipy
),但是numpy
没有声明该需求/依赖性setup.py
- 如果当前环境提供了所需的包,则为此类包构建控制盘将成功
- 如果所需的软件包不可用,构建轮子将失败
setup.py
。但这在很大程度上是不可行的,我们必须走另一条路
解决方案:首先安装所需的软件包
该过程(用于安装需要numpy
的scipy
)有两个步骤
下载缓存
和查找链接
重叠,如下面的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
)
numpy
:
$ pip install numpy
当车轮准备好时,它应该很快scipy
构建控制盘(仍在virtualenv中)
到现在为止,您将有您需要的车轮填充您的驾驶室scipy
如果缺少numpy
,直接从新scipy
控制盘安装scipy
,仍将失败。我们首先通过安装numpy
来克服这个问题
$ pip install numpy
然后用scipy结束
$ pip install scipy
我想,这可以在一次调用中完成(但我没有测试它)
重复安装经验证版本的scipy
很可能,在未来某一时刻,scipy
或numpy
的新版本将发布,pip将尝试安装驾驶室中没有车轮的最新版本
如果您可以使用到目前为止使用过的版本,则应创建requirements.txt
,说明您喜欢的numpy
和scipy
版本,并从中安装
这将确保所需的软件包在真正使用之前就已经存在。我的设置与您在链接答案中描述的基本相同,但是,您在这里写的内容我并不清楚。如果不满足
numpy
依赖关系,就无法构建scipy
控制盘。它需要C代码才能编译。@midnightscipy
似乎是一个非常复杂的解决方案,不容易安装。我可能估计得太快了,wheel很容易构建,目前我正在尝试这样做,但如果失败,我将删除或更新我的答案。@midnight注意:wheel不会阻止编译您的包(如numpy),它只允许执行一次(通过pip wheel
)然后快速安装。若它是基于C的包,那个么它将需要编译,除非你们有一个鸡蛋把它重建成轮子。@midnight我做了。答案中描述。那么您使用哪个numpy
构建scipy
控制盘?
$ pip install numpy
$ pip install scipy
$ pip install numpy scipy