Сборка и распространение вашего пакета
Теперь, когда мы создали Python-пакет с дополнительными файлами и убедились, что можем получить к ним доступ, давайте узнаем, как собрать и распространить этот пакет.
Обновление скрипта установки
Прежде чем собирать пакет, давайте обновим наш файл setup.py, чтобы включить больше метаданных и требований:
cd ~/project
cat > setup.py << 'EOF'
from setuptools import setup, find_packages
setup(
name="mypackage",
version="0.1.0",
packages=find_packages(),
## Include data files
package_data={
"mypackage": ["config.ini", "data/*.txt"],
},
## Dependencies
install_requires=[
"setuptools",
],
## Metadata
author="Your Name",
author_email="your.email@example.com",
description="A simple Python package with additional files",
keywords="sample, package, data",
url="https://example.com/mypackage",
classifiers=[
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
],
python_requires=">=3.6",
)
EOF
Сборка дистрибутивов Source и Wheel
Python-пакеты могут распространяться в нескольких форматах, но наиболее распространенными являются:
- Source Distribution (sdist): архив (tarball), содержащий исходный код и дополнительные файлы
- Wheel Distribution (bdist_wheel): предварительно собранный пакет, который можно установить без сборки
Давайте создадим оба типа дистрибутивов:
## Make sure we have the latest build tools
pip install --upgrade setuptools wheel
## Build the distributions
python setup.py sdist bdist_wheel
Вы должны увидеть вывод, указывающий на то, что дистрибутивы были созданы, и новые файлы должны появиться в каталоге dist.
Давайте проверим содержимое каталога dist:
ls -l dist
Вы должны увидеть как минимум два файла:
- Файл
.tar.gz (дистрибутив исходного кода)
- Файл
.whl (дистрибутив wheel)
Установка пакета из файлов дистрибутива
Теперь давайте протестируем установку пакета из одного из файлов дистрибутива. Сначала удалим нашу версию для разработки:
pip uninstall -y mypackage
Теперь давайте установим дистрибутив wheel:
pip install dist/mypackage-0.1.0-py3-none-any.whl
Вы должны увидеть вывод, указывающий на то, что пакет был успешно установлен.
Давайте убедимся, что пакет установлен и что мы по-прежнему можем получить доступ к дополнительным файлам:
python -c "import mypackage; print(mypackage.read_config())"
Это должно вывести содержимое файла config.ini:
[config]
debug = true
log_level = INFO
Публикация вашего пакета
В реальном сценарии вы обычно будете публиковать свой пакет в Python Package Index (PyPI), чтобы другие могли установить его, используя pip install mypackage. Это будет включать:
- Создание учетной записи на PyPI (https://pypi.org/)
- Использование таких инструментов, как
twine, для загрузки ваших дистрибутивов:pip install twine
twine upload dist/*
Однако для этой лабораторной работы мы остановимся на создании дистрибутивов локально. Теперь у вас есть полный Python-пакет с дополнительными файлами, который может быть распространен и установлен другими пользователями.
Краткое описание того, что вы создали
- Python-пакет с модулями и дополнительными файлами
- Скрипт установки, который включает эти файлы в дистрибутив
- Функции для доступа к этим файлам из вашего кода
- Файлы дистрибутива source и wheel, готовые к распространению
Эта структура обеспечивает прочную основу для любого Python-пакета, который вы, возможно, захотите создать в будущем.