使用“--global option”为python包指定安装时依赖项
我正在尝试打包一个具有安装时(以及运行时)依赖项的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
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
命令之前执行。为了更好地理解这个问题,setuptoolscythonize
选项从何而来?cythonize
选项将由setup.py
我的包的依赖项脚本:对我来说,它显然像一个命令,而不是一个选项,因此别名可能更有效。