如何使用 pip 单独安装 python 包及其依赖项以允许单独的 pip 选项?



我有一个(分支(python软件包,需要一个额外的选项才能安装。我发现这可以使用 pip 的--global-option选项来完成:

pip install --global-option="cythonize" git+https://github.com/blaiseli/pybedtools.git@fix_missing_headers

但是,此选项会使此包的依赖项的安装失败,因为它也适用于它们,并且无法识别。

如何先单独安装依赖项?

pip install --only-deps <some package>这样的东西似乎不存在。


编辑

如本答案所示,我尝试在软件包的分支中设置别名,以便在安装之前运行cythonize命令:

$ cat setup.cfg 
[wheel]
universal = 1
[nosetests]
detailed-errors = 1
doctest-extension = .pyx .py
[aliases]
install = cythonize install

奇怪的是,cythonize命令被正确处理:

$ python3.7 setup.py cythonize
running cythonize
Compiling pybedtools/cbedtools.pyx because it changed.
Compiling pybedtools/featurefuncs.pyx because it changed.
[1/2] Cythonizing pybedtools/cbedtools.pyx
/usr/local/lib/python3.7/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /home/bli/src/pybedtools/pybedtools/cbedtools.pxd
tree = Parsing.p_module(s, pxd, full_module_name)
[2/2] Cythonizing pybedtools/featurefuncs.pyx
/usr/local/lib/python3.7/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /home/bli/src/pybedtools/pybedtools/featurefuncs.pyx
tree = Parsing.p_module(s, pxd, full_module_name)

但是当它是别名的一部分时,它不会被识别:

$ python3.7 setup.py install
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: setup.py --help [cmd1 cmd2 ...]
or: setup.py --help-commands
or: setup.py cmd --help
error: invalid command 'cythonize'

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

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

[aliases]
install = cythonize install

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

pip在某种程度上支持带有内联选项的requirements.txt文件。所以你可以选择这样的requirements.txt

# ...
cython
git+https://github.com/blaiseli/pybedtools.git@fix_missing_headers --global-option="cythonize"
# ...

并像这样安装:

pip install --requirement requirements.txt

我说有点因为它似乎仍然对其他要求的安装有(显然没有破坏性的(影响。特别是它似乎禁用了其他要求和依赖项的轮子,这对我来说没有意义。

最新更新