Как пип деинсталлировать с помощью 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.
Теперь, чтобы удалить конкретный пакет (ы):
- Удалить соответствующие записи из
requirements.txt
; - Зафиксируйте изменения.
Спасибо Линкольну из команды поддержки 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