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

In Python, `pip -r requirements.txt` doesn't install packages *recursively*?

我正在使用 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)

在我的 requirements.txt 中,我写:

pysam>=0.9.0

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

pip3 install -U -r requirements.txt

这个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 没有安装 递归 吗?

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

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

cython>=0.22
pysam>=0.9.0

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

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