setuptools "хотя бы одна из этих" спецификаций зависимостей - PullRequest
2 голосов
/ 08 января 2010

В некоторых случаях существуют различные модули, каждый из которых реализует общий API (в моем случае, старый чистый python elementtree, cElementTree, lxml.etree и встроенный xml.etree). Я могу написать модуль, используя ElementTree, чтобы попробовать каждый из этих вариантов, и взять первый, который существует в соответствии с моим собственным порядком предпочтений, - но я не могу найти никакой информации о том, что только один из них должен быть установлен в setup.py. Я хочу написать что-то похожее на это:

setup(
    ...,
    install_requires="""
        elementtree | cElementTree | lxml
    """,
    ...
)

Возможно ли это или что-то подобное?

Ответы [ 2 ]

0 голосов
/ 08 января 2010

Вы можете попробовать сделать что-то подобное в setup.py:

install_requires = ["elementree"]

try:
    import cElementTree
    install_requires = []
except ImportError:
    try:
        import lxml
        install_requires = []
    except ImportError:
        # etc for remaining equivalent modules

setup(
    install_requires = install_requires,
    # rest of setup parameters
)

Это в основном установит пакет elementree как зависимость, если ни один из его эквивалентов не установлен.

0 голосов
/ 08 января 2010

Я так не думаю, но, если вы используете сравнительно недавно Python, elementtree являющийся частью стандартных библиотек Python, почему вы беспокоитесь, что он может отсутствовать? (Я понимаю, что это будет проблемой для других случаев нескольких возможных реализаций API, просто мне интересно, действительно ли вам это нужно для вашего конкретного случая использования).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...