Как удалить удаленные файлы с помощью virtualenv на стеке кедра гегку?
Я попытался удалить модуль на heroku с помощью:
heroku запустить bin/python bin/pip удалить все
Pip показывает модуль в дереве /app, а затем утверждает, что он укомплектовал модуль, но повторное выполнение этой же команды показывает, что оно установлено в том же месте в дереве/приложении.
Есть ли способ получить успешное решение pip uinstall?
Работа Heroku запускает новый динозавр и запускает команду, указанную только в этом dyno. Dynos являются эфемерными, поэтому результаты удаления pip не прилипают.
Ответы
Ответ 1
Обновлен 2013-09-30:. Текущий способ очистки виртуального файла, по-видимому, указывает другую версию исполнения python в runtime.txt
как указано в Github и в ссылка Herocu devcenter.
Имейте в виду, что Heroku в настоящее время "поддерживает и поддерживает использование Python 2.7.4 и 3.3.2", поэтому, если ваше приложение не поддерживает оба Python 2.7.4 и 3.3.2, вы можете протестировать его со временем выполнения 'lh хотите переключиться на (в настоящее время доступно в 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
В настоящее время это не сработает, потому что есть ошибка. Вам нужно будет использовать мою вилку в buildpack до тех пор, пока get фиксированный восходящий поток (запрос на pull был закрыт):
heroku config:add BUILDPACK_URL=https://github.com/blaze33/heroku-buildpack-python.git
Теперь нажмите новый код, и вы заметите, что весь virtualenv будет переустановлен.
Ответ Andrey больше не работает с 23 марта 2012 года. новый стиль virtualenv commit переместил виртуальное env из /app в/app/. heroku/venv, но ветвь чистки не обновлялась, чтобы догнать вас, чтобы вы оказались в виртуальной среде, не находясь в PYTHONHOME.
Чтобы не переустанавливать все после каждого нажатия, отключите параметр:
heroku labs:disable user-env-compile
heroku config:remove CLEAN_VIRTUALENV BUILDPACK_URL
Ответ 2
Теперь есть более простой способ очистки кэша пипов. Просто измените среду выполнения, например, с "python-2.7.3" на "python-2.7.2" или наоборот.
Чтобы сделать это, добавьте файл с именем runtime.txt в корень вашего репозитория, который содержит только строку времени выполнения (как показано выше).
Для этого вам необходимо включить функцию пользовательской компиляции в лаборатории Heroku. См. https://devcenter.heroku.com/articles/labs-user-env-compile
Ответ 3
По умолчанию virtualenv кэшируется между развёртываниями.
Чтобы избежать кэширования пакетов, вы можете запустить:
heroku config:add [email protected]:heroku/heroku-buildpack-python.git#purge
Таким образом, все будет создано с нуля после того, как вы нажмете некоторые изменения. Чтобы включить кеширование, просто удалите конфигурационную переменную BUILDPACK_URL.
Теперь для удаления определенных пакетов (ов):
- Удалите соответствующие записи из
requirements.txt
;
- Зафиксируйте и нажмите изменения.
Спасибо Линкольну из группы поддержки Heroku за разъяснения.
Ответ 4
Я создал несколько рецептов fabfile для ответов Maxime и Jesse, которые позволяют повторно установить требования с помощью одной команды fab: https://gist.github.com/littlepea/5096814 ( посмотрите на докстоки для объяснения и примеры).
Для ответа Maxime я создал задачу "heroku_clean" (или "hc" ), это будет выглядеть примерно так:
fab heroku_clean
Или используя псевдоним и указав приложение heroku:
fab hc:app=myapp
Для ответа Джесси я создал задачу "heroku_runtime" (или "hr" ), она устанавливает время выполнения скрипта heroku python и фиксирует runtime.txt(также создает его, если его не было):
fab heroku_runtime:2.7.2
Если версия исполнения не передана, она просто переключит ее между 2.7.2 и 2.7.3, поэтому самый простой способ изменить и зафиксировать время выполнения:
fab hr
Затем вы можете просто развернуть (нажать на начало героя) ваше приложение, и virtualenv будет перестроен. Я также добавил задачу "heroku_deploy" ( "hr" ), которую я использую для нажатия и масштабирования heroku, которые также могут быть пользователями вместе с задачей "heroku_runtime". Это мой предпочтительный метод развертывания и восстановления virtualenv - все происходит в одной команде, и я могу выбрать, когда его перестраивать, я не люблю делать это каждый раз, как подсказывает Maxime, потому что это может занять много времени:
fab hd:runtime=yes
Это эквивалент:
fab heroku_runtime
fab heroku_deploy