Как пип деинсталлировать с помощью virtualenv на стоге кедровых героев?

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

Герои запускают bin/python bin/pip

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

Есть ли способ заставить pip uinstall преуспеть?


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

4 ответа

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

Имейте в виду, что 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 была в какой-то момент удалена официальным сборочным пакетом):

Как объяснил Дэвид, вы не можете удалить один пакет из pip, но вы можете очистить и переустановить весь 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 commit переместил виртуальный env из /app в /app/.heroku/venv, но ветвь очистки не была обновлена, чтобы наверстать упущенное, так что в итоге вы не получили virtualenv. быть в PYTHONHOME.

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

heroku labs:disable user-env-compile
heroku config:remove CLEAN_VIRTUALENV BUILDPACK_URL

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

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

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

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

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

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

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

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

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

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

Я создал несколько рецептов 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

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

fab hd:runtime=yes

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

fab heroku_runtime
fab heroku_deploy
Другие вопросы по тегам