Назначение 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