Кажется, pip-tools - это именно тот инструмент, который вам нужен для решения проблем, с которыми вы столкнулись в процессе разработки.
pip-tools
позволяет вам указать свои высокоуровневые зависимости ( например, Django), при этом автоматически заботясь о ваших низкоуровневых зависимостях (например, pytz). Он также позволяет синхронизировать c вашей среды с файлом requirements.txt
независимо от того, в каком беспорядочном состоянии вы можете быть.
Установка pip-tools
в вашем проекте
Для использования pip-tools
, сначала создайте новую пустую виртуальную среду Python в своем проекте и активируйте ее, используя инструмент по вашему выбору:
- с venv (встроенный):
python3 -m venv .venv && source .venv/bin/activate
- с pyenv :
pyenv virtualenv 3.8.1 project-env && pyenv local project-env
Затем установите pip-tools
в виртуальной среде Python вашего проекта:
Управление зависимостями с помощью pip-compile
с использованием файла requirements.in
pip-tools
включает в себя инструмент pip-compile
, который принимает requirements.in
файл в качестве ввода. Этот requirements.in
файл похож на requirements.txt
, но содержит только высокоуровневые зависимости. Например, если ваш проект использует последнюю версию Django, вы можете написать что-то вроде этого в requirements.in
:
django>=3.0,<3.1
Вы можете видеть, что requirements.in
не содержит зависимостей Django, только Django.
Как только вы установите свои зависимости в requirements.in
, используйте pip-compile
, чтобы "скомпилировать" requirements.in
в requirements.txt
файл:
➜ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile requirements.in
#
asgiref==3.2.3 # via django
django==3.0.2
pytz==2019.3 # via django
sqlparse==0.3.0 # via django
Файл requirements.txt
, сгенерированный pip-compile
, указывает источник каждой косвенной зависимости рядом с именем пакета. Например, pytz==2019.3
является зависимостью django
. В дополнение к этому, он также прикрепляет каждую зависимость к точному номеру версии, чтобы убедиться, что установка ваших зависимостей воспроизводима
Применение зависимостей из сгенерированных requirements.txt
с помощью pip-sync
Теперь, когда у вас есть requirements.txt
, вы можете применить его в вашей виртуальной среде Python, используя pip-sync
:
➜ pip-sync requirements.txt
Collecting asgiref==3.2.3 (from -r /var/folders/r1/n_n031s51wz2gjwy7mb9k4rh0000gn/T/tmpvhv549si (line 1))
Using cached https://files.pythonhosted.org/packages/a5/cb/5a235b605a9753ebcb2730c75e610fb51c8cab3f01230080a8229fa36adb/asgiref-3.2.3-py2.py3-none-any.whl
Collecting django==3.0.2 (from -r /var/folders/r1/n_n031s51wz2gjwy7mb9k4rh0000gn/T/tmpvhv549si (line 2))
Using cached https://files.pythonhosted.org/packages/55/d1/8ade70e65fa157e1903fe4078305ca53b6819ab212d9fbbe5755afc8ea2e/Django-3.0.2-py3-none-any.whl
Collecting pytz==2019.3 (from -r /var/folders/r1/n_n031s51wz2gjwy7mb9k4rh0000gn/T/tmpvhv549si (line 3))
Using cached https://files.pythonhosted.org/packages/e7/f9/f0b53f88060247251bf481fa6ea62cd0d25bf1b11a87888e53ce5b7c8ad2/pytz-2019.3-py2.py3-none-any.whl
Collecting sqlparse==0.3.0 (from -r /var/folders/r1/n_n031s51wz2gjwy7mb9k4rh0000gn/T/tmpvhv549si (line 4))
Using cached https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl
Installing collected packages: asgiref, pytz, sqlparse, django
Successfully installed asgiref-3.2.3 django-3.0.2 pytz-2019.3 sqlparse-0.3.0
pip-sync
, чтобы убедиться, что ваша виртуальная среда точно соответствует тому, что определено в файл requirements.txt
путем удаления и установки соответствующих пакетов.
После синхронизации среды убедитесь, что код проекта работает правильно. Если это так, передайте requirements.in
и requirements.txt
в систему управления версиями.
Ссылка
Для получения более подробной информации вы можете обратиться к документам pip-tools , или к статье Хинека Шлавака: Python Управление зависимостями приложений в 2018 .