Я пытаюсь упаковать библиотеку 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-option
pip (см. В конце публикации, что происходит, если опция не указана).
Если я правильно понимаю, актуальный в настоящее время способ автоматического получения некоторых зависимостей до использования setup.py
состоит в том, чтобы указывать их в разделе [build-system]
файла pyproject.toml
.
Я попробовал следующее 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"
(Кстати, мне потребовалось довольно много времени, чтобы выяснить, как задать build-backend
, документация не легко обнаружить.)
Однако при pip install
возникает следующая ошибка:
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.
Как правильно указать параметры для зависимостей ?
Если я просто укажу пакет и яts URL ("pybedtools @ git+https://github.com/blaiseli/pybedtools.git@fix_missing_headers
), установка завершается неудачно следующим образом:
Exception:
Cython-generated file 'pybedtools/cbedtools.cpp' not found.
Please install Cython and run
python setup.py cythonize
При попытке устранить вышеуказанную ошибку я узнал о параметре --global-option
pip. Я могу вручную запустить pip install --global-option="cythonize" git+https://github.com/blaiseli/pybedtools.git@fix_missing_headers
, и установка работает, при условии, что зависимости этого пакета уже установлены, в противном случае их установка завершится неудачно из-за нераспознанной опции "cythonize"
(что является другой проблемой ...).
Обратите внимание, что этот параметр необходим только при установке «из источника» (например, при установке с вилки на github, как в моем случае здесь).