Какие способы работы с пакетами в 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<"3.10"',
]
И можем собирать
python -m buildВ-пятых,
conda, с лицензией BSD, между прочимСоздание виртуальных окружений
conda create -n digitable python=3Использование окружения
source activate digitableИ установка разумеется
conda install numpyВ-шестых,
pdm, мне он нравится большеСтарт проекта -
pdm initУстановка зависимостей
pdm add requests flask
В-седьмых,
pyflow, на его вдохновении был создан pdm работает по сути также как и pipx, список команд такой же примерноПо сути на большей части проектов используется обычный `pip`, `pipx` или `poetry`
Что интересно, это то, что коммьюнити питона-петона-удава-петухона никак не можем договориться делать что-то одно, хотя тот же javascript тоже в ту же степь пошел, теперь там `yarn`, `npm`, `pnpm` и имхо из-за вендорства Microsoft над Typescript скоро будет `nuget`, хотя ЕМНИП npm теперь тоже им принадлежит