使用“--global option”为python包指定安装时依赖项

使用“--global option”为python包指定安装时依赖项,python,pip,setuptools,pyproject.toml,Python,Pip,Setuptools,Pyproject.toml,我正在尝试打包一个具有安装时(以及运行时)依赖项的python库:它imports模块,以便模块可以通知安装过程一些提供的C头的位置: from distutils.extension import Extension from pybedtools.helpers import get_includes as pybedtools_get_includes from pysam import get_include as pysam_get_include # [...] extensions

我正在尝试打包一个具有安装时(以及运行时)依赖项的python库:它
import
s模块,以便模块可以通知安装过程一些提供的C头的位置:

from distutils.extension import Extension
from pybedtools.helpers import get_includes as pybedtools_get_includes
from pysam import get_include as pysam_get_include
# [...]
extensions = [
    Extension(
        "bam25prime.libcollapsesam", ["bam25prime/libcollapsesam.pyx"],
        include_dirs=pysam_get_include()),
    Extension(
        "bam25prime.libcollapsebed", ["bam25prime/libcollapsebed.pyx"],
        include_dirs=pybedtools_get_includes(),
        language="c++"),
    ]
# [...]
但是,其中一个依赖项(
pybedtools
)需要安装一个特定的
--global选项
pip选项(请参见本文末尾未提供该选项时的情况)

如果我理解正确,在使用
setup.py
之前,当前自动提供一些依赖项的最新方法是在
pyproject.toml
文件的
[build system]
部分中指示它们

我尝试了以下
pyproject.toml

[build-system]
requires = [
    "pysam",
    "pybedtools @ git+https://github.com/blaiseli/pybedtools.git@fix_missing_headers --global-option='cythonize'",
]
build-backend = "setuptools.build_meta"
(顺便说一句,我花了很长时间才弄明白如何指定
构建后端,文档不容易发现。)

但是,这会在pip安装时产生以下错误:

  ERROR: Invalid requirement: "pybedtools @ git+https://github.com/blaiseli/pybedtools.git@fix_missing_headers --global-option='cythonize'"
  Hint: It looks like a path. File 'pybedtools @ git+https://github.com/blaiseli/pybedtools.git@fix_missing_headers --global-option='cythonize'' does not exist.
如何正确指定依赖项的选项

如果我只指定包及其URL(
“pybedtools@git+https://github.com/blaiseli/pybedtools.git@修复\u缺少\u头
),安装失败,如下所示:

    Exception:
                            Cython-generated file 'pybedtools/cbedtools.cpp' not found.

                            Please install Cython and run

                                python setup.py cythonize
在尝试处理上述错误时,我发现了
--global选项
pip选项。 我可以手动运行pip安装--global option=“cythonize”git+https://github.com/blaiseli/pybedtools.git@修复缺少的\u头
,安装工作正常,前提是该软件包的依赖项已安装,否则其安装会因无法识别的
“cythonize”
选项(即…)而失败


请注意,仅当安装“从源代码”时才需要此选项(例如,当从github上的fork安装时,我在这里就是这样)。

与另一个相同,我怀疑
cythonize
是一个setuptools命令,而不是全局选项

如果确实是这样,那么最好在
setup.cfg
中设置别名。如果运行
python setup.py alias install cythonize install
,则应将以下内容添加到
setup.cfg

[aliases]
install = cythonize install

稍后运行
pip install
时,pip将使用此别名,并且
cythonize
命令将在
install
命令之前执行。

为了更好地理解这个问题,setuptools
cythonize
选项从何而来?
cythonize
选项将由
setup.py
我的包的依赖项脚本:对我来说,它显然像一个命令,而不是一个选项,因此别名可能更有效。