在 Python 中,`pip -r requirements.txt` 不*递归*安装包?

Han*_*Sun 5 python pip cython python-3.x

我正在使用 Python 3.5.1 和 pip 7.1.2:

pip3 --version
pip 7.1.2 from /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages (python 3.5)
Run Code Online (Sandbox Code Playgroud)

在我的 requirements.txt 中,我写道:

pysam>=0.9.0
Run Code Online (Sandbox Code Playgroud)

然后我pip3用来安装这个requirements.txt文件,如下所示:

pip3 install -U -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

pysam有它自己的依赖项:cython,可以在以下位置看到:https://github.com/pysam-developers/pysam/blob/master/requirements.txt

但是,使用pip3 install -U -r requirements.txt似乎不是pysam递归安装的依赖项,它会抛出一个期望ValueError: no cython installed

有没有人知道为什么requirements.txt递归安装?

Te-*_*ers 4

pysamsetup.py脚本似乎使用requires而不是典型的install_requires; 后者生成 pip 确定其需求所需的元数据。事实上,pysam 似乎需要 cython 才能构建自身,所以更合适的是,它应该使用setup_requires. 如果没有安装 cython,您可以检查安装 pysam 是否以正常方式失败。

(编辑:不起作用) 无论如何,您可以通过在需求文件中将 cython 放在 pysam 之前来解决这个问题;这样,pip 将在 cython 移动到 pysam 之前尝试安装它:

cython>=0.22
pysam>=0.9.0
Run Code Online (Sandbox Code Playgroud)

编辑:要明确的是,这与其本身无关pip -r requirements.txt。这是因为 pip 没有从 pysam 接收到足够的元数据,无法知道它需要先安装 cython,然后再尝试安装 pysam。

第二次编辑:你是对的。安装仍然失败,因为 pip 在进入构建阶段之前尝试从 pysam 设置脚本获取元数据,并且如果未安装 cython,pysam 设置脚本会引发该错误。在这种特定情况下,我不确定除了事先在单独的命令中安装 Cython 之外是否还有其他解决方案。