Как создать require.txt без всех версий пакета - PullRequest
2 голосов
/ 22 января 2020

Прямо сейчас мой requirement.txt содержит следующий список пакетов:

asgiref==3.2.3
beautifulsoup4==4.8.2
certifi==2019.11.28
chardet==3.0.4
Click==7.0
Django==3.0.2
idna==2.8
pytz==2019.3
requests==2.22.0
six==1.14.0
soupsieve==1.9.5
sqlparse==0.3.0
urllib3==1.25.7

Мне просто нужно только имя пакета, чтобы pip3 всегда устанавливал последнюю версию.

Ответы [ 3 ]

2 голосов
/ 22 января 2020

Подумайте, написали ли вы ваше приложение в Django 2.xa несколько месяцев go и в вашем requirements.txt указали Django в качестве зависимости. Теперь, когда Django 3 отсутствует, его установка может вызвать скачок основной версии с Django 2 до 3, а потенциально сломает половину вашего приложения. И это всего лишь одна ваших зависимостей.

Нет, версии исправлены специально. Обновление версий должно быть сознательным усилием, включающим тестирование для подтверждения совместимости. Вы хотите запускать программное обеспечение в заведомо исправном состоянии , а не в случайном непредсказуемом состоянии. Несовместимость версий не следует недооценивать. pip может легко дать вам список всех устаревших зависимостей , и обновление их - это просто другая команда.

Время анекдота: openpyxl недавно содержал ошибку в версии 3.0.1 , которая сломала важную функцию в нашем приложении. Знаете ли вы, почему это не повлияло на нас ? Поскольку наш requirements.txt использует фиксированные версии, и я обнаружил проблему, запустив наши модульные тесты при обновлении зависимостей вручную и выбрав , а не , чтобы обновить openpyxl из-за этого. Без фиксированных версий наше приложение было бы сломано в течение нескольких недель, тогда как openpyxl 3.0.1 была самой последней версией.

1 голос
/ 22 января 2020

Вы также можете посмотреть на этот вопрос . Из этого вопроса я взял один из ответов, который, я думаю, может решить вашу проблему. Он не удалит версию пакета, но всякий раз, когда вы будете устанавливать файл requiremwnts.txt, он обновит ваши пакеты до последних версий.

pip install pip-upgrader

Активируйте virtualenv (важно, потому что это также установите новые версии обновленных пакетов в текущем virtualenv).

cd в каталог проекта, затем выполните:

pip-upgrade

Если требования помещены в нестандартное расположение, отправьте их в качестве аргументов:

pip-upgrade path/to/requirements.txt

Если вы уже знаете, какой пакет вы хотите обновить, просто отправьте их в качестве аргументов:

pip-upgrade -p django -p celery -p dateutil

0 голосов
/ 22 января 2020

Вы можете проанализировать файл requirements.txt с самим python, получить имена пакетов и разделить их вручную, как показано ниже:

with open("requirements.txt") as myFile:
  pkgs = myFile.read()
  pkgs = pkgs.splitlines()

  for pkg in pkgs:
      print(pkg.split('==')[0])

, это даст вам что-то вроде ниже:

enter image description here

...