Как я могу использовать файл требований pip для удаления, а также установки пакетов?
У меня есть файл требований pip, который изменяется во время разработки.
Can pip
быть произведена до удалить пакеты, которые не отображаются в файле требований, а также установка тех, которые появляются? Есть ли стандартный метод?
Это позволит файл требований pip быть каноническим списком пакетов-и подход "если и только если".
обновление: я предложил его в качестве новой функции на https://github.com/pypa/pip/issues/716
6 ответов:
это должно удалить что-нибудь не в требованиях.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
предложение Стивена-хорошая идея, но, к сожалению, она не работает если вы включаете только прямые требования в свой файл, который звучит чище для меня.
все зависимости будут удалены, в том числе даже
distribute
, пробиваниеpip
сам по себе.поддержание чистого файла требований при отслеживании версии виртуальной среды
вот как я пытаюсь версия-отслеживать мою виртуальную среду. Я стараюсь поддерживать минимальный
requirements.txt
, в том числе только прямые требования, и даже не упоминая ограничения версии, где Я не уверен.но кроме того, я сохраняю и включаю в отслеживание версий (скажем, git), фактическое состояние мое виртуальное окружение в .
вот пример рабочего процесса:
настройка рабочего пространства virtualenv с отслеживанием версий:
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