Этот раздел объясняет полную структуру проекта на Python. Какой вид расположения директорий можно использовать и как выпустить программное обеспечение в мир.
Основной код
Имя модуля Python будет myfact, поэтому мы создадим директорию далее.
$ mkdir myfact
Основной код будет находиться в файле под названием fact.py
"myfact module"
def factorial(num):
"""
Возвращает факториал заданного числа.
:arg num: Целочисленное значение, факториал которого мы будем вычислять.
:return: Значение факториала или -1 в случае, если передано отрицательное значение.
"""
if num >= 0:
if num == 0:
return 1
return num * factorial(num -1)
else:
return -1
У нас также есть файл __init__.py для модуля.
from fact import factorial
__all__ = [factorial, ]
Мы также добавили файл README.rst. Таким образом, структура директории выглядит следующим образом
$ ls
myfact README.rst
$ ls myfact/
fact.py __init__.py
MANIFEST.in
Теперь мы должны написать файл MANIFEST.in, который будет использоваться для определения, какие файлы будут частью исходного архива проекта при использовании команды sdist.
include *.py
include README.rst
Если вы хотите исключить какой-либо файл, вы можете использовать операторы exclude в этом файле.
Установка пакета python-setuptools
Вам необходимо установить пакет python-setuptools в вашей системе. Для этого мы используем виртуальное окружение (шаги здесь не показаны)
$ pip install setuptools
setup.py
Наконец, мы должны написать setup.py, который затем можно использовать для создания исходного архива или установки программного обеспечения.
#!/usr/bin/env python
"""Проект Факториал"""
from setuptools import find_packages, setup
setup(name = 'factorial',
version = '0.1',
description = "Модуль Факториал.",
long_description = "Тестовый модуль для нашей книги.",
platforms = ["Linux"],
author="Кушал Данс",
author_email="kushaldas@gmail.com",
url="http://pymbook.readthedocs.org/en/latest/",
license = "MIT",
packages=find_packages()
)
name — это название проекта, version — версия релиза. Вы легко по
Использование setup.py
Для создания исходного дистрибутива выполните следующую команду.
$ python setup.py sdist
running sdist
running egg_info
creating factorial.egg-info
writing factorial.egg-info/PKG-INFO
writing top-level names to factorial.egg-info/top_level.txt
writing dependency_links to factorial.egg-info/dependency_links.txt
writing manifest file 'factorial.egg-info/SOURCES.txt'
reading manifest file 'factorial.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'factorial.egg-info/SOURCES.txt'
running check
creating factorial-0.1
creating factorial-0.1/factorial.egg-info
creating factorial-0.1/myfact
making hard links in factorial-0.1...
hard linking MANIFEST.in -> factorial-0.1
hard linking README.rst -> factorial-0.1
hard linking setup.py -> factorial-0.1
hard linking factorial.egg-info/PKG-INFO -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/SOURCES.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/dependency_links.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/top_level.txt -> factorial-0.1/factorial.egg-info
hard linking myfact/__init__.py -> factorial-0.1/myfact
hard linking myfact/fact.py -> factorial-0.1/myfact
Writing factorial-0.1/setup.cfg
creating dist
Creating tar archive
removing 'factorial-0.1' (and everything under it)
Архив можно найти в директории dist.
$ ls dist/
factorial-0.1.tar.gz
Примечание
Не забудьте использовать виртуальное окружение при попытке установить код :)
Для установки из исходного кода используйте следующую команду.
$ python setup.py install
Примечание
Для получения дополнительной информации прочитайте на packaging.python.org .
Индекс пакетов Python (PyPI)
Помните команду pip, которую мы используем до сих пор? Задумывались ли вы, откуда берутся эти пакеты? Ответ — PyPI . Это репозиторий программного обеспечения для языка программирования Python.
Для нашего примера мы будем использовать тестовый сервер PyPI, который находится по адресу https://testpypi.python.org/pypi
Создание аккаунта
Сначала зарегистрируйтесь по этой ссылке . Вы получите письмо с ссылкой, перейдите по этой ссылке и подтвердите свою регистрацию.
Данные вашего аккаунта обычно хранятся в файле с именем .pypirc в вашем домашнем каталоге. Содержимое файла будет выглядеть следующим образом:
[distutils] index-servers = pypi [pypi] repository: https://testpypi.python.org/pypi username: <username> password: <password>
Замените и на данные вашего только что созданного аккаунта.
Примечание
Не забудьте изменить название проекта на что-то другое в файле [](#id1)setup.py
для проверки следующих инструкций.
Регистрация вашего проекта
Далее мы зарегистрируем наш проект в сервисе PyPI. Это делается с помощью команды register. Мы также будем использовать -r для указания тестового сервера.
$ python setup.py register -r https://testpypi.python.org/pypi
running register
running egg_info
writing factorial.egg-info/PKG-INFO
writing top-level names to factorial.egg-info/top_level.txt
writing dependency_links to factorial.egg-info/dependency_links.txt
reading manifest file 'factorial.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'factorial.egg-info/SOURCES.txt'
running check
Registering factorial to https://testpypi.python.org/pypi
Server response (200): OK
Загрузка вашего проекта
Теперь, наконец, мы можем загрузить наш проект на сервер PyPI с помощью команды upload. Помните, что эта команда должна быть вызвана сразу после того, как вы создадите файлы распространения исходного кода/бинарные файлы.
$ python setup.py sdist upload -r https://testpypi.python.org/pypi
running sdist
running egg_info
writing factorial.egg-info/PKG-INFO
writing top-level names to factorial.egg-info/top_level.txt
writing dependency_links to factorial.egg-info/dependency_links.txt
reading manifest file 'factorial.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'factorial.egg-info/SOURCES.txt'
running check
creating factorial-0.1
creating factorial-0.1/factorial.egg-info
creating factorial-0.1/myfact
making hard links in factorial-0.1...
hard linking MANIFEST.in -> factorial-0.1
hard linking README.rst -> factorial-0.1
hard linking setup.py -> factorial-0.1
hard linking factorial.egg-info/PKG-INFO -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/SOURCES.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/dependency_links.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/top_level.txt -> factorial-0.1/factorial.egg-info
hard linking myfact/__init__.py -> factorial-0.1/myfact
hard linking myfact/fact.py -> factorial-0.1/myfact
Writing factorial-0.1/setup.cfg
Creating tar archive
removing 'factorial-0.1' (and everything under it)
running upload
Submitting dist/factorial-0.1.tar.gz to https://testpypi.python.org/pypi
Server response (200): OK
Теперь, если вы посетите сайт , вы увидите, что ваш проект готов к использованию другими пользователями.
Создание аккаунта
Сначала зарегистрируйтесь по этой ссылке . Вы получите письмо с ссылкой, перейдите по этой ссылке и подтвердите свою регистрацию.
Ваши данные аккаунта обычно хранятся в файле под названием .pypirc в вашем домашнем каталоге. Содержимое файла будет выглядеть следующим образом:
[distutils] index-servers = pypi [pypi] repository: https://testpypi.python.org/pypi username: <username> password: <password>
Замените и на данные вашего только что созданного аккаунта.
Примечание
Не забудьте изменить название проекта на что-то другое в [](#id1)setup.py
для проверки следующих инструкций.
Регистрация вашего проекта
Далее мы зарегистрируем наш проект в сервисе PyPI. Это делается с помощью команды register. Мы также будем использовать -r для указания на тестовый сервер.
$ python setup.py register -r https://testpypi.python.org/pypi
running register
running egg_info
writing factorial.egg-info/PKG-INFO
writing top-level names to factorial.egg-info/top_level.txt
writing dependency_links to factorial.egg-info/dependency_links.txt
reading manifest file 'factorial.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'factorial.egg-info/SOURCES.txt'
running check
Registering factorial to https://testpypi.python.org/pypi
Server response (200): OK
Загрузка вашего проекта
Теперь, наконец, мы можем загрузить наш проект на сервер PyPI с помощью команды upload. Помните, что эта команда должна быть вызвана сразу после того, как вы создадите файлы распространения исходного кода/бинарные файлы.
$ python setup.py sdist upload -r https://testpypi.python.org/pypi
running sdist
running egg_info
writing factorial.egg-info/PKG-INFO
writing top-level names to factorial.egg-info/top_level.txt
writing dependency_links to factorial.egg-info/dependency_links.txt
reading manifest file 'factorial.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'factorial.egg-info/SOURCES.txt'
running check
creating factorial-0.1
creating factorial-0.1/factorial.egg-info
creating factorial-0.1/myfact
making hard links in factorial-0.1...
hard linking MANIFEST.in -> factorial-0.1
hard linking README.rst -> factorial-0.1
hard linking setup.py -> factorial-0.1
hard linking factorial.egg-info/PKG-INFO -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/SOURCES.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/dependency_links.txt -> factorial-0.1/factorial.egg-info
hard linking factorial.egg-info/top_level.txt -> factorial-0.1/factorial.egg-info
hard linking myfact/__init__.py -> factorial-0.1/myfact
hard linking myfact/fact.py -> factorial-0.1/myfact
Writing factorial-0.1/setup.cfg
Creating tar archive
removing 'factorial-0.1' (and everything under it)
running upload
Submitting dist/factorial-0.1.tar.gz to https://testpypi.python.org/pypi
Server response (200): OK
Теперь, если вы посетите сайт , вы обнаружите, что ваш проект готов к использованию другими пользователями.