Укажите зависимость времени установки с помощью `--global-option` для пакета python
Я пытаюсь упаковать библиотеку 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 option (см. в конце сообщения, что происходит, когда опция не указана).
Если я правильно понимаю, актуальный в настоящее время способ автоматически иметь некоторые зависимости, доступные до 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.
Как правильно указать параметры зависимостей?
Если я просто укажу пакет и его 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 install --global-option="cythonize" git+https://github.com/blaiseli/pybedtools.git@fix_missing_headers
, и установка работает при условии, что зависимости этого пакета уже установлены, в противном случае их установка не удастся из-за нераспознанного "cythonize"
вариант (это уже другая проблема...).
Обратите внимание, что эта опция нужна только при установке "из исходников" (например, при установке из форка на github, как в моем случае здесь).
1 ответ
То же, что и в другом вашем вопросе, я подозреваюcythonize
это команда setuptools, а не глобальная опция.
Если это действительно так, тогда вам лучше установить псевдоним в своемsetup.cfg
. Если ты бежишьpython setup.py alias install cythonize install
, это должно добавить к вашему setup.cfg
:
[aliases]
install = cythonize install
При беге pip install
позже pip будет учитывать этот псевдоним, аcythonize
команда будет выполнена прямо перед install
команда.