как пип деинсталлировать с помощью virtualenv на кедровую стопку героку? - PullRequest
22 голосов
/ 20 января 2012

Я пытался удалить модуль на героку с помощью:

heroku run bin / python bin / pip удалить что угодно

Pip показывает модуль в дереве / app, затем утверждает, что удалил модуль, но при повторном запуске той же команды он показывает, что он установлен в том же месте в дереве / app.

Есть ли способ добиться успеха установки pip?


Heroku run создает экземпляр нового dyno и запускает команду, указанную только в этом dyno. Dynos эфемерны, поэтому результаты деинсталляции pip не сохраняются.

Ответы [ 4 ]

32 голосов
/ 15 июня 2012

Обновлено 2013-09-30: в текущем способе очистки virtualenv указывается другая версия среды выполнения Python в runtime.txt , как указано на Github и в Справочник разработчика Heroku .

Имейте в виду, что Heroku в настоящее время "только одобряет и поддерживает использование Python 2.7.4 и 3.3.2", поэтому, если ваше приложение не поддерживает оба Python 2.7.4 и 3.3.2, вы можете протестировать его во время выполнения, которое вы Вы захотите переключиться на (в настоящее время доступно на http://envy-versions.s3.amazonaws.com/$PYTHON_VERSION.tar.bz2, хотя переключение между 2.7.4 и 2.7.3 в большинстве случаев не должно быть проблемой).

Спасибо @Jesse за актуальный ответ и комментаторам, которые сообщили мне об этой проблеме.


Был обновлен в ноябре 2012 года (с тех пор я не обновлял связанный сборочный пакет, мой запрос извлечения был закрыт, и функция CLEAN_VIRTUALENV была в какой-то момент отброшена официальным сборочным пакетом):

Как объяснил Дэвид, вы не можете удалить один пакет, но вы можете очистить и переустановить весь virtualenv. Используйте лабораторную функцию user-env-compile с опцией CLEAN_VIRTUALENV для очистки virtualenv:

heroku labs:enable user-env-compile
heroku config:add CLEAN_VIRTUALENV=true

В настоящее время это не будет работать, потому что есть ошибка. Вам нужно будет использовать мой форк пакета сборки, пока этот не будет исправлен в восходящем направлении (запрос на извлечение закрыт):

heroku config:add BUILDPACK_URL=https://github.com/blaze33/heroku-buildpack-python.git

Теперь вставьте новый код, и вы заметите, что весь virtualenv переустанавливается.

Ответ Андрея больше не работает с 23 марта 2012 года. Коммит новый стиль virtualenv переместил виртуальный env из / app в /app/.heroku/venv, но ветвь очистки не была обновлена, чтобы наверстать упущенное так что вы в конечном итоге с добродетелью не находитесь в PYTHONHOME.

Чтобы избежать переустановки всего после каждого нажатия, отключите опцию:

heroku labs:disable user-env-compile
heroku config:remove CLEAN_VIRTUALENV BUILDPACK_URL
22 голосов
/ 26 февраля 2013

Теперь существует более простой способ очистки кеша пипсов. Просто измените среду выполнения, например, с «python-2.7.3» на «python-2.7.2» или наоборот.

Для этого добавьте файл с именем runtime.txt в корень вашего репозитория, который содержит только строку времени выполнения (как показано выше).

Чтобы это работало, вам нужно включить функцию пользовательской env-compile в Heroku labs. Смотри https://devcenter.heroku.com/articles/labs-user-env-compile

10 голосов
/ 27 февраля 2012

По умолчанию virtualenv кэшируется между развертываниями.

Чтобы избежать кэширования пакетов, вы можете запустить:

heroku config:add BUILDPACK_URL=git@github.com:heroku/heroku-buildpack-python.git#purge

Таким образом, все будет построено с нуля послеВы продвигаете некоторые изменения.Чтобы включить кэширование, просто удалите переменную конфигурации BUILDPACK_URL.

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

  1. Удалите соответствующие записи из requirements.txt;
  2. Передайте и отправьте изменения.

Спасибо Линкольну из группы поддержки Heroku за разъяснения.

0 голосов
/ 06 марта 2013

Я создал несколько рецептов fabfile для ответов Maxime и Jesse, которые позволяют переустанавливать требования с помощью одной команды fab: https://gist.github.com/littlepea/5096814 (см. Строки документации для объяснения и примеров).

Для ответа Максима я создал задачу 'heroku_clean' (или 'hc'), она будет выглядеть примерно так:

fab heroku_clean

Или используя псевдоним и указав приложение heroku:

fab hc:app=myapp

Для ответа Джесси я создал задачу 'heroku_runtime' (или 'hr'), она устанавливает время выполнения python heroku и фиксирует runtime.txt (также создает его, если он не существует):

fab heroku_runtime:2.7.2

Если версия времени выполнения не пропущена, она просто переключит ее между 2.7.2 и 2.7.3, поэтому самый простой способ изменить и зафиксировать среду выполнения:

fab hr

Тогда вы можете просто развернуть (отправить в исходную точку героя) свое приложение, и virtualenv будет перестроен. Я также добавил задачу 'heroku_deploy' ('hr'), которую я использую для толчка и масштабирования heroku, которую также можно использовать вместе с задачей 'heroku_runtime'. Это мой предпочтительный метод развертывания и восстановления virtualenv - все происходит в одной команде, и я могу выбирать, когда его перестраивать, я не люблю делать это каждый раз, как подсказывает ответ Максима, потому что это может занять много времени:

fab hd:runtime=yes

Это эквивалент:

fab heroku_runtime
fab heroku_deploy
...