Укажите зависимость времени установки с помощью `--global-option` для пакета python

Я пытаюсь упаковать библиотеку 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 = [
    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 команда.

Другие вопросы по тегам