Как я могу использовать файл требований к файлам для удаления, а также установить пакеты?

У меня есть файл требований к приложениям, который изменяется во время разработки.

Можно ли сделать pip об удалении пакетов, которые не отображаются в файле требований, а также об установке тех, которые появляются? Существует ли стандартный метод?

Это позволит файлу требований к пикам быть каноническим списком пакетов – подход «если и только если».

Обновление : я предложил новую функцию на странице https://github.com/pypa/pip/issues/716

6 Solutions collect form web for “Как я могу использовать файл требований к файлам для удаления, а также установить пакеты?”

Короткий ответ – нет, вы не можете сделать это с помощью пипса.

Это должно удалить что-либо не в требования .txt:

 pip freeze | grep -v -f requirements.txt - | grep -v '^#' | xargs pip uninstall -y 

Хотя это не будет работать правильно с пакетами, установленными с -e , т. Е. Из репозитория git или аналогичного. Чтобы пропустить их, просто отфильтруйте пакеты, начиная с -e :

 pip freeze | grep -v -f requirements.txt - | grep -v '^#' | grep -v '^-e ' | xargs pip uninstall -y 

Тогда, очевидно:

 pip install -r requirements.txt 

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

https://github.com/nvie/pip-tools

Обновление за май 2016 года:

Теперь вы можете также использовать pip uninstall -r requirements.txt , однако это в основном делает противоположное – оно удаляет все в requirements.txt

Это не особенность pip , нет. Если вы действительно этого хотите, вы можете написать сценарий, чтобы сравнить выход pip freeze с помощью вашего requirements.txt , но, скорее всего, это будет больше хлопот, чем того стоит.

Используя virtualenv , проще и надежнее просто создать чистую среду и (повторно) установить из requirements.txt , например:

 deactivate rm -rf venv/ virtualenv venv/ source venv/bin/activate pip install -r requirements.txt 

Piggybacking от @ stephen-j-fuhry здесь эквивалент powershell, который я использую:

 pip freeze | ? { $_ -notmatch ((gc req.txt) -join "|") } 

Предложение Стивена – хорошая идея, но, к сожалению, это не сработает, если вы включите в свой файл только прямые требования, что звучит чище для меня.

Все зависимости будут удалены, в том числе даже distribute , сломать сам pip .

Поддержание чистого файла требований при отслеживании версий виртуальной среды

Вот как я пытаюсь выполнить проверку версии моей виртуальной среды. Я стараюсь поддерживать минимальные requirements.txt , включая только прямые требования, и даже не упоминать ограничения версий, где я не уверен.

Но кроме того, я сохраняю и включаю в отслеживание версий (например, git) фактический статус моего virtualenv в файле venv.pip .

Вот пример рабочего процесса:


setup virtualenv workspace, с отслеживанием версий:

 mkdir /tmp/pip_uninstalling cd /tmp/pip_uninstalling virtualenv venv . venv/bin/activate 

инициализировать систему отслеживания версий:

 git init echo venv > .gitignore pip freeze > venv.pip git add .gitignore venv.pip git commit -m "Python project with venv" 

установите пакет с зависимостями, включите его в файл требований:

 echo flask > requirements.txt pip install -r requirements.txt pip freeze > venv.pip 

Теперь приступайте к созданию своего приложения, затем создавайте и запускайте новую ветку:

 vim myapp.py git commit -am "Simple flask application" git checkout -b "experiments" 

установите дополнительный пакет:

 echo flask-script >> requirements.txt pip install -r requirements.txt pip freeze > venv.pip 

… играйте с ним, а затем вернитесь к более ранней версии

 vim manage.py git commit -am "Playing with flask-script" git checkout master 

Теперь удалите посторонние пакеты:

 pip freeze | grep -v -f venv.pip | xargs pip uninstall -y 

Я предполагаю, что процесс может быть автоматизирован с помощью git-крючков, но давайте не будем тему.

Разумеется, тогда имеет смысл использовать некоторую систему кэширования пакетов или локальный репозиторий, такой как pip2pi

Теперь можно использовать:

 pip uninstall -r requirements.txt 
  • Pip / easy_install игнорирует ARCHFLAGS в установке SciPy?
  • фатальная ошибка: файл «string.h» не найден после обновления до python 3.2 и установки определенных модулей из virtualenv
  • ImportError: нет модуля с именем extern
  • Python: установленный пакет селена не обнаружен
  • Как установить определенную версию пакета с помощью pip?
  • установить scipy пакет через pycharm в Windows 10 64 бит - python 3.5
  • Есть ли способ показать деревья зависимостей для пакетов pip?
  • Не удалось обновить пакет python six в mac osx 10.10.2
  • Установить pip на OS X
  • Как установить пакеты install в соответствии с требованиями.txt из локального каталога?
  • Получить дату и время установки для пакетов, установленных через pip
  • Python - лучший язык программирования в мире.