Зависимости в Python-упаковке - запутанная тема.Долгое время единственным стандартом был PEP 314, который определяет параметр requires
, provides
и obsoletes
для функции distutils.core.setup
.Элементы, используемые для этих аргументов, - это имя модуля Python, например provides=['xml', 'xml.utils']
.PEP не очень ясно понимал зависимости стандартной библиотеки (должен ли я зависеть от Python> = 2.5 или мне нужно 'xml'
?), И, как оказалось, не было инструмента, который бы использовал эти поля (недаже отвлекается сам).
Потом пришли setuptools.Он ввел другие виды зависимостей, которые использовали проект имена вместо modules , поэтому, например, вы можете иметь setup(..., install_requires=['PyXML', 'Pylons'], tests_require=['nose'])
, что гораздо полезнее: люди выпускают программное обеспечение на PyPI, используя уникальный проектимена, и вы можете использовать эти же имена в своем скрипте установки, чтобы зависеть от них, и с помощью easy_install или pip вы установите эти зависимости, модули, скрипты и все.
Когда поводья distutils снова были поднятыНесколько лет назад сообщество стандартизировало идею установки зависимостей для создания PEP 345, которая теперь реализована в distutils2 и предназначена для замены distutils и setuptools.
Подводя итог, можно сказать:Зависимости уровня модуля в стиле distutils в вашем скрипте установки, которые бесполезны - у вас могут быть deps уровня проекта в стиле setuptools, которые используются инструментами на основе setuptools - вы можете иметь PEP 345-совместимые deps уровня проекта в setup.cfg
файл, который используется distutils2
Итак, чтобы позволить намОтветьте на свой вопрос, вы должны сказать нам, какой у вас есть.Во всех практических вопросах не следует использовать deps модуля в стиле distutils, поэтому он оставляет проект deps в стиле setuptools или новый стиль PEP 345, которые все еще являются новыми и еще не получили широкого распространения.distutils2 имеет слой compat для setuptools, поэтому его можно использовать для получения необходимой информации из сценария setup.py
на основе setuptools.
Не связанного с инструментами упаковки, есть также инструмент, которыйМожно сканировать ваш код, чтобы найти используемые вами модули: это модуль modulefinder в стандартной библиотеке, который не очень известен или используется, судя по печальному состоянию его кода.Этот инструмент не сообщит вам, был ли используемый модуль взят из stdlib или стороннего проекта, и не может сказать вам имя проекта для использования в вашем файле setup.py
или setup.cfg
.
НТН