Укажите временную зависимость установки с помощью `--global-option` для пакета Python - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь упаковать библиотеку 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, как в моем случае здесь).

1 Ответ

0 голосов
/ 15 октября 2019

То же, что и в вашем другом вопросе , я подозреваю, что cythonize - это команда setuptools , а не глобальная опция .

Если это действительно так, то вам лучше установить псевдоним в вашем setup.cfg. Если вы запустите python setup.py alias install cythonize install, это добавит к вашему setup.cfg следующее:

[aliases]
install = cythonize install

При запуске pip install позже pip будет учитывать этот псевдоним и cythonizeКоманда будет выполнена непосредственно перед командой install.

...