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 |