Python Language
setup.py
Поиск…
параметры
параметр | использование |
---|---|
name | Название вашего дистрибутива. |
version | Строка версии вашего дистрибутива. |
packages | Список пакетов Python (то есть каталогов, содержащих модули) для включения. Это можно указать вручную, но вместо этого обычно используется вызов setuptools.find_packages() . |
py_modules | Список модулей Python верхнего уровня (то есть отдельных файлов .py ) для включения. |
замечания
Для получения дополнительной информации о упаковке python см.
Для написания официальных пакетов есть руководство пользователя для упаковки .
Назначение 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
пакетов, удалите use_scm_version=True
.
Добавление параметров установки
Как видно из предыдущих примеров, базовое использование этого скрипта:
python setup.py install
Но есть еще больше возможностей, таких как установка пакета и возможность изменить код и протестировать его, не переустанавливая его. Это делается с использованием:
python setup.py develop
Если вы хотите выполнить определенные действия, такие как компиляция документации Sphinx или создание кода 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