Введение

Примеры

Назначение setup.py

Сценарий установки является центром всей деятельности по созданию, распространению и установке модулей с использованием Distutils. Его цель - правильная установка программного обеспечения.

Если все, что вам нужно, это распространить модуль с именем foo, содержащийся в файле foo.py, то ваш скрипт установки может быть таким простым:

 from distutils.core import setup

setup(name='foo',
      version='1.0',
      py_modules=['foo'],
      )

 

Чтобы создать исходный дистрибутив для этого модуля, вы должны создать скрипт установки setup.py, содержащий приведенный выше код, и запустить эту команду из терминала:

 python setup.py sdist

 

sdist создаст архивный файл (например, tarball в Unix, ZIP-файл в Windows), содержащий ваш скрипт установки setup.py и ваш модуль foo.py. Архивный файл будет называться foo-1.0.tar.gz (или .zip) и будет распакован в каталог foo-1.0.

Если конечный пользователь желает установить ваш модуль foo, все, что ему нужно сделать, это загрузить foo-1.0.tar.gz (или .zip), распаковать его и - из каталога foo-1.0 - запустить

 python setup.py install 

Добавление сценариев командной строки в ваш пакет Python

Скрипты командной строки внутри пакетов Python являются общими. Вы можете организовать свой пакет таким образом, чтобы, когда пользователь установит пакет, скрипт был доступен по его пути.

Если вы имели greetings пакета , который имел в командной строке скрипт hello_world.py .

 greetings/
   greetings/
      __init__.py
      hello_world.py 

Вы можете запустить этот скрипт, запустив:

 python greetings/greetings/hello_world.py 

Однако, если вы хотите запустить его так:

 hello_world.py 

Вы можете достичь этого путем добавления scripts к вашей setup() в setup.py , как это:

 from setuptools import setup
setup(
  name='greetings',
  scripts=['hello_world.py']
) 

При установке пакета приветствия теперь hello_world.py будет добавлен к вашему пути.

Другой возможностью было бы добавить точку входа:

 entry_points={'console_scripts': ['greetings=greetings.hello_world:main']}

 

Таким образом, вы просто должны запустить его так:

 greetings 

Использование метаданных контроля версий в setup.py

setuptools_scm является официально благословенным пакетом , который можно использовать Git или Mercurial метаданные , чтобы определить номер версии пакета, и найти пакеты Python и данные пакета , чтобы включить в него.

 from setuptools import setup, find_packages

setup(
    setup_requires=['setuptools_scm'],
    use_scm_version=True,
    packages=find_packages(),
    include_package_data=True,
)

 

Этот пример использует обе функции; только использовать метаданные SCM для версии, замените вызов find_packages() с ручным списком пакетов, или использовать только пакет искатель, удалить use_scm_version=True .

Добавление параметров установки

Как видно из предыдущих примеров, основное использование этого скрипта:

 python setup.py install

 

Но есть еще больше возможностей, таких как установка пакета и возможность изменить код и протестировать его без необходимости переустановки. Это делается с помощью:

 python setup.py develop

 

Если вы хотите , чтобы выполнять определенные действия , как составление документации сфинкса или строительство FORtran кода, вы можете создать свой собственный вариант , как это:

 cmdclasses = dict()

class BuildSphinx(Command):

    """Build Sphinx documentation."""

    description = 'Build Sphinx documentation'
    user_options = []

    def initialize_options(self):
        pass

    def finalize_options(self):
        pass

    def run(self):
        import sphinx
        sphinx.build_main(['setup.py', '-b', 'html', './doc', './doc/_build/html'])
        sphinx.build_main(['setup.py', '-b', 'man', './doc', './doc/_build/man'])

cmdclasses['build_sphinx'] = BuildSphinx

setup(
...
cmdclass=cmdclasses,
)

 

initialize_options и finalize_options будут выполняться до и после run функции , как их имена предполагает его.

После этого вы сможете назвать свой вариант:

 python setup.py build_sphinx 

Синтаксис

Параметры

Примечания