Как я могу использовать файл требований 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