#all #development #python #packages #environment #dependencies #pip #pipx #conda #poetry #pyflow #pdm #venv
Какие способы работы с пакетами в Python вы знаете?
Да и вообще зачем всё это надо?
Смысл в том, что проекты редко делаются без стороннего набора библиотек, особенно, когда строите что-то поверх фреймворков. Так и выходит, что каким-то образом надо следить чтобы зависимости находились в одном месте и их можно было подтягивать вне зависимости от разработчика и среды окружения. Будь это другой разработчик на другой ОС или же CI/CD-агенты.
Если не использовать менеджеры пакетов/зависимостей, тогда всё будет храниться в вашем общем кеше, да и другое окружение/разработчик просто-напросто не будет знать какие версии и каких пакетов ставить.
Что есть в Питоне?Во-первых, pip, который можно использовать в следующем виде:
collapsed:: true
установка - pip install torch
установка конкретных версий - pip install torch==2.2
установка из конкретных registries, множества пакетов, а также с привязкой к версии питона - pip3.10 install torch torchvision torchaudio --index-url
https://download.pytorch.org/whl/cu118удаление - pip uninstall torch
листинг - pip show torch
через файл с указанием версий, например так:
# requirements.txt
torch==2.2
И последующая установка
pip3.10 install -r requirements.txt
Или удаление
pip3.10 uninstall requirements.txt
Но пакеты по-прежнему будут кешироваться, а значит нужно еще и пользоваться виртуальным окружением, чтобы использовать конкретную директорию
Единожды создаёте эту самую директорию,
python -m venv .venv
А далее, каждый раз в вашем терминале в папке проекта вызывайте . .venv/bin/activate, чтобы питон знал, что сейчас он работает с локальными модулями вместо глобальных
Во-вторых, pipx, который делает тоже самое что и pip, но уже сразу с venv
Во-третьих, poetry, который еще и в сборку умеет и в отслеживание зависимостей и огромную кучу всего
pipx install poetry==1.2.0
Есть там еще приколу вроде inject-а зависимостей, например
pipx inject ipython matplotlib
Чтобы доставить matplotlib к ipython
В-четверых, setuptools в роли такого же file-based указателя зависимостей
pip install setuptools
А далее в pyproject.toml указываем зависимости
[project]
name = "mypackage"
version = "0.0.1"
dependencies = [
"requests",
'importlib-metadata; python_version