Создайте различные типы рассылки с помощью setup.py

Учитывая следующую (демонстрационную) схему проекта:

MyProject/ README LICENSE setup.py myproject/ ... # packages extrastuff/ ... # some extra data 

Как (и где) объявлять разные типы дистрибутивов? Особенно мне нужны эти два варианта:

  1. Распределение, содержащее только источник

  2. Распространение, содержащее источник и все файлы данных в (extrastuff)

В идеале, как объявить верхнюю конфигурацию, тогда как вторая зависит от первой?

2 Solutions collect form web for “Создайте различные типы рассылки с помощью setup.py”

Я реализовал что-то подобное раньше … команда sdist может быть расширена для обработки дополнительных аргументов командной строки и для управления файлами данных на их основе. Если вы запустите python setup.py sdist --help , он включит ваши аргументы командной строки в help, что приятно. Используйте следующий рецепт:

 from distutils import log from distutils.core import setup from distutils.command.sdist import sdist class CustomSdist(sdist): user_options = [ ('packaging=', None, "Some option to indicate what should be packaged") ] + sdist.user_options def __init__(self, *args, **kwargs): sdist.__init__(self, *args, **kwargs) self.packaging = "default value for this option" def get_file_list(self): log.info("Chosen packaging option: {self.packaging}".format(self=self)) # Change the data_files list here based on the packaging option self.distribution.data_files = list( ('folder', ['file1', 'file2']) ) sdist.get_file_list(self) if __name__ == "__main__": setup( name = "name", version = "version", author = "author", author_email = "author_email", url = "url", py_modules = [ # ... ], packages = [ # ... ], # data_files = default data files for commands other than sdist if you wish cmdclass={ 'sdist': CustomSdist } ) 

Вы можете расширить файл setup.py, чтобы дополнительно включить некоторые пользовательские синтаксические разбора командной строки. Затем вы можете поймать собственный аргумент и отключить его, чтобы он не повлиял на setuptools .

Вы можете получить доступ к аргументу командной строки в sys.argv . Что касается модификации вызова setuptools.setup() , я рекомендую создать словарь аргументов для передачи, изменения словаря на основе аргументов командной строки, а затем вызвать setup() с использованием нотации **dict , например:

 from setuptools import setup import sys basic = {'name': 'my program'} extra = {'bonus': 'content'} if '--extras' in sys.argv: basic.update(extra) sys.argv.remove('--extras') setup(**basic) за from setuptools import setup import sys basic = {'name': 'my program'} extra = {'bonus': 'content'} if '--extras' in sys.argv: basic.update(extra) sys.argv.remove('--extras') setup(**basic) 

Для более тщательного анализа командной строки вы также можете использовать модуль getopt или новый модуль argparse если вы используете только Python 2.7 и выше.

EDIT : Я также нашел раздел в документации distutils под названием « Создание новой команды Distutils» . Это также может быть полезным ресурсом.

  • ссылки на установку ссылок
  • Запретить установку пакета на старых версиях Python
  • Manifest.in, package_data и data_files?
  • Каков наилучший способ распространения пакета Python, который требует минимальной версии Python
  • Как запустить набор тестов в python setup.py
  • Как удалить пакеты, установленные с помощью easy_install Python?
  • setup.py исключает некоторые файлы python из bdist
  • Создайте сценарий графического интерфейса запуска из Python setuptools (без консольного окна!)
  • Python - лучший язык программирования в мире.