setuptools Python

Содержание
Введение
find_packages: поиск пакетов
Структура проекта
Пример
Похожие статьи

Введение

find_packages: поиск пакетов

Чтобы изучить какие пакеты видит setuptools выполните

python >>> import setuptools >>> setuptools.find_packages()

['src']

Эта информация пригодится если вы будете передавать аргументы в setup.py → packages

Структура проекта

pac_container └── pac ├── __init__.py ├── pcalc │ ├── calculator.py │ └── __init__.py ├── printer │ ├── __init__.py │ └── printer.py └── setup.py

Важно правильно расположить файл setup.py

В данном случае после установки пакета в pip у него будет название pac, а импортировать нужно будет pcalc и printer

Если рядом будет несколько таких директорий как src - то для импорта будет доступно несколько пакетов, но в pip будет один pac на всех

# pac/src/calculator.py def add(a, b): return a + b def subtract(a, b): return a - b def multiply(a, b): return a * b def divide(a, b): return a / b

# pac/setup.py # Should be outside source code import setuptools setuptools.setup( include_package_data=True, name="pac", version="1.0.0", description="setuptools demo pac", url="https://www.eth1.ru/code/python/packages/setuptools/", author="www.eth1.ru", author_email="info@eth1.ru", packages=setuptools.find_packages(), install_requires=["pandas", "pytest"], long_description="setuptools demo package by www.eth1.ru", long_description_content_type="text/markdown", classifiers=[ "Programming Language :: Python :: 3", "Operating System :: OS Independent", ], )

# pac/printer/printer.py def printer(): print("This is printer")

cd pac python >>> import setuptools >>> setuptools.find_packages()

['printer', 'pcalc']

python -m pip freeze

python -m pip install .

Processing /home/andrei/pac_container/pac DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default. pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555. Collecting pandas Using cached pandas-1.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB) Collecting pytest Using cached pytest-7.1.2-py3-none-any.whl (297 kB) Collecting pytz>=2020.1 Using cached pytz-2022.2.1-py2.py3-none-any.whl (500 kB) Collecting numpy>=1.18.5 Using cached numpy-1.23.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.1 MB) Collecting python-dateutil>=2.8.1 Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) Collecting six>=1.5 Using cached six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting tomli>=1.0.0 Using cached tomli-2.0.1-py3-none-any.whl (12 kB) Collecting attrs>=19.2.0 Using cached attrs-22.1.0-py2.py3-none-any.whl (58 kB) Collecting iniconfig Using cached iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB) Collecting packaging Using cached packaging-21.3-py3-none-any.whl (40 kB) Collecting pluggy<2.0,>=0.12 Using cached pluggy-1.0.0-py2.py3-none-any.whl (13 kB) Collecting py>=1.8.2 Using cached py-1.11.0-py2.py3-none-any.whl (98 kB) Collecting pyparsing!=3.0.5,>=2.0.2 Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB) Using legacy 'setup.py install' for pac, since package 'wheel' is not installed. Installing collected packages: six, pyparsing, tomli, pytz, python-dateutil, py, pluggy, packaging, numpy, iniconfig, attrs, pytest, pandas, pac Running setup.py install for pac ... done Successfully installed attrs-22.1.0 iniconfig-1.1.1 numpy-1.23.2 pac-1.0.0 packaging-21.3 pandas-1.4.3 pluggy-1.0.0 py-1.11.0 pyparsing-3.0.9 pytest-7.1.2 python-dateutil-2.8.2 pytz-2022.2.1 six-1.16.0 tomli-2.0.1

python -m pip freeze

attrs==22.1.0 iniconfig==1.1.1 numpy==1.23.2 pac==1.0.0 packaging==21.3 pandas==1.4.3 pluggy==1.0.0 py==1.11.0 pyparsing==3.0.9 pytest==7.1.2 python-dateutil==2.8.2 pytz==2022.2.1 six==1.16.0 tomli==2.0.1

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

cd
pwd

/home/andrei

python >>> import pcalc >>> from pcalc import calculator >>> calculator.divide(5, 2)

2.5

>>> from printer import printer >>> printer.printer()

This is printer

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

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

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

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

@aofeed

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

@aofeedchat

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