Этот раздел объясняет полную структуру проекта на 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

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

Перейти к следующему уроку →