Цель этой презентации пролить свет на ситуацию с управлением пакетами и выделить важные этапы в эволюции инструментов, поскольку на исходной странице “History of Packaging” представлены только датированные вехи без контекста.
site modulePATH.site.
distutilsdistutils. <root>/
├── src/
│ ├── __init__.py
│ ├── foo.py
│ └── bar.py
└── setup.pysetup.py с следующим содержанием:
distutils, так что пример приведен только в образовательных целях.import hooks__builtin__.__import__ (PEP 302).import hooks.
importlib.PyPIsetuptoolsdistutils - setuptools.
install_requires.easy_install.egg.setuptools решила большинство проблем с пакетами в момент появления и, вероятно, стала самой популярной библиотекой для упаковки, она до сих пор не является частью стандарта.virtualenv и venvvirtualenv, позволяющая создавать изолированные среды для установки и использования пакетов, а также ссылаться на разные версии Python в этих окружения.
virtualenv.
user@unix:/usr/home/test# virtualenv ENV
user@unix:/usr/home/test/ENV# tree -L 3
.
├── bin
│ ├── activate
│ ├── easy_install
│ ├── python
│ ├── python3 -> python
│ └── python3.10 -> python
├── include
│ └── python3.10m -> /usr/include/python3.10m
└──lib
├──python3.10
├── abc.py -> /usr/lib/python3.7/abc.py
├── . . .
├── weakref.py -> /usr/lib/python3.7/weakref.py
├── distutils
├── site-packages
└── site.pyvenvvenv, использующий новый стандарт PEP 405, который вводит механизм для легковесных окружений.
venv:
venv и посмотрим содержимое полученной папки:
user@unix:/usr/home/test2# python3 -m venv ENV
user@unix:/usr/home/test2# tree -L 3
.
└── ENV
├── bin
│ ├── activate
│ ├── easy_install
│ ├── easy_install-3.10
│ ├── python -> python3
│ └── python3 -> /usr/bin/python3
├── include
├── lib
│ └── python3.10
├── lib64 -> lib
├── pyvenv.cfg
└── sharepyenv.cfg:
user@unix:/usr/home/test2# cat ENV/pyvenv.cfg
home = /usr/bin
include-system-site-packages = false
version = 3.10.0virtualenv продолжает независимо развиваться, не смотря на то, что часть его функций была перенесена в стандартную библиотеку Python в виде модуля venv.pippip, как замена easy_install из setuptools.
distutils и setuptools решали задачи не только установки, но и сборки пакетов, pip изначально концентрировался на вопросе установки пакетов.pip представил сообществу формат файла requirements.txt, в котором можно указать требуемые библиотеки и их версии.pip объединил под собой существующие форматы и решения и стал стандартом установки пакетов на языке Python.setuptools для сборки пакетов из зависимостей, однако с появлением новых стандартов, описывающих build backend, pip перестал зависеть от setuptools и стал выполнять роль build frontend.pip позиционирует себя как инструмент установки пакетов на Python. Он не выполняет роль менеджера проекта.PyPAAnacondaconda packages.conda packages для них в этом же году разработали первую версию пакетного менеджера, который назвали conda.conda packages – repo.anaconda.com, и для сообщества открыли возможность создавать свои “каналы” для пакетного менеджера conda.Mamba.orgconda-forge – Quansight, QuantStack и несколько крупных контрибьютеров conda-forge.QuetzMambaBoalibmamba от “Mamba Org” в пакетный менеджер conda.wheelswheels, описанный в PEP 427.wheels становится приоритетный форматом поставки пакетов.wheels достаточно похож на формат conda package, однако у них есть расхождения на уровне наименований, а также работы с shared libs.pyproject.tomlДостаточно важный сдвиг в парадигме управления пакетами Python.
pyproject.toml.manylinux. А в 2019 появится последняя версия стандарта уже для формата пакетов wheels.build backend.pyproject.toml. В этом же году принимается стандарт PEP 621, в котором фиксируется, что теперь в файле pyproject.toml указываются и все метаданные пакета. Таким образом, вместе с PEP 518, PEP 517 и PEP 631 унифицируя конфигурацию Python пакета, приводя наконец всё к одному файлу.pyproject.toml.pipenvpip взял на себя роль установщика пакетов, но не полноценного менеджера проекта.pipenv, который сейчас находится под управлением PyPA. pipenv обладает следующей функциональностью:
Pipfile.lock из Pipfile, при этом оставляя возможность указывать только то, что вы хотите.pyenv.Pipfile, который выполняет рольrequerements.txt, позволяя при этом задавать не только зависимости проекта, но зависимости необходимые на этапе разработки.Pipfile при их установке или удалении.