Структура пакета в Python

Содержание
Введение
Пример
Похожие статьи

Введение

PEP 420

Перед изучением этой статьи убедитесь, что вам знакомы темы «sys.path в Python» «Пакеты в Python» «Namespace пакеты в Python»

project_name ├── docs ├── README.rst ├── setup.py ├── src │ └── package_name │ ├── __init__.py │ ├── more_source.py │ └── subpackage1 │ └── __init__.py └── tests └── test_code.py

Корень проекта - project_name это не часть пакета

.rst означает reStructuredText

============ Project Name =========== A brief description of the project Section 1 ========= Installation or "quick start" information can go here. Subsetion --------- Some details can go here.

src содержит кода пакета

Важно помнить, что если запустить Python из project_name то эта директория будет добавлена в sys.path

Значит всё, что лежит внутри может быть импортировано. В том числе и то, что не лежит в package_name

А ведь именно то, что в package_name в конечном счёте получит пользователь вашего софта.

Тесты желательно хранить отдельно от пакета

Пример

python ├── demo_reader │ ├── README.rst │ ├── setup.py │ ├── src │ │ └── demo_reader │ │ ├── compressed │ │ │ ├── bzipped.py │ │ │ ├── gzipped.py │ │ │ └── __init__.py │ │ ├── __main__.py │ │ ├── multireader.py │ │ └── util │ │ ├── __init__.py │ │ └── writer.py │ └── tests │ └── test_multireader.py ├── test.bz2 └── test.gz

Из директории src можно выполнить

python -m demo_reader ../../test.gz

data compressed with gz by Andrei

# tests/test_multireader.py import unittest import demo_reader.multireader class TestMultireader(unittest.TestCase): def test_initialization(self): demo_reader.multireader.MultiReader('test_file.txt')

Рассмотрим пакет с setuptools

import setuptools setuptools.setup( name="demo_reader", version="1.0.0", description="Tools for reading various file formats", packages=setuptools.find_packages('src'), package_dir={'': 'src'})

Похожие статьи
Пакеты в Python
Namespace пакеты в Python
Правильная структура пакета
setuptools
Плагины
Python

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: