¿Cómo pip desinstalar con virtualenv en heroku cedar stack?

Intenté desinstalar un módulo en heroku con:

heroku run bin / python bin / pip desinstala lo que sea

Pip muestra el módulo en el árbol / app y luego afirma haber instalado el módulo, pero al ejecutar el mismo comando nuevamente se lo muestra en la misma ubicación en el árbol / app.

¿Hay alguna manera de que pip uinstall tenga éxito?


Heroku run crea una instancia de un nuevo dinamómetro y ejecuta el comando especificado en ese dinamómetro solamente. Los Dynos son efímeros, por lo que los resultados de la desinstalación de pip no se mantienen.

Actualizado el 09-09-2015: la forma actual de eliminar el virtualenv parece especificar una versión diferente del tiempo de ejecución de python en runtime.txt como se indica en Github y en la referencia del centro de referencia de Heroku .

Tenga en cuenta que Heroku actualmente “solo respalda y admite el uso de Python 2.7.4 y 3.3.2”, por lo que, a menos que su aplicación sea compatible con Python 2.7.4 y 3.3.2, es posible que desee probarlo con el tiempo de ejecución que desee. para cambiar a (actualmente disponible en http://envy-versions.s3.amazonaws.com/$PYTHON_VERSION.tar.bz2 , aunque no debería ser un problema cambiar, por ejemplo, entre 2.7.4 y 2.7.3 en la mayoría de los casos) ).

Gracias a @Jesse por su respuesta actualizada y a los comentaristas que me informaron sobre el problema.


Estaba actualizado en noviembre de 2012 (desde entonces no he actualizado el buildpack vinculado, mi solicitud de extracción se cerró y la característica CLEAN_VIRTUALENV se eliminó en algún momento por parte del buildpack oficial):

Como explicó David, no puede copiar un paquete pero puede purgar y reinstalar todo el virtualenv. Utilice la función de laboratorio de comstackción del usuario env con la opción CLEAN_VIRTUALENV para purgar el virtualenv:

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

Actualmente esto no funcionará porque hay un error. Deberá usar mi bifurcación del buildpack hasta que esto se solucione en sentido ascendente (se cerró la solicitud de extracción):

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

Ahora presione su nuevo código y notará que todo el virtualenv se reinstala.

La respuesta de Andrey ya no funciona desde el 23 de marzo de 2012. El nuevo estilo virtualenv commit movió el entorno virtual de / app a /app/.heroku/venv, pero la twig de purga no se actualizó para ponerse al día, por lo que no obtienes un virtualenv estando en PYTHONHOME.

Para evitar volver a instalar todo después de cada inserción, desactive la opción:

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

Ahora hay una forma más sencilla de borrar el caché de pip. Simplemente cambie el entorno de ejecución, por ejemplo, de ‘python-2.7.3’ a ‘python-2.7.2’, o viceversa.

Para hacer esto, agregue un archivo llamado runtime.txt a la raíz de su repository que contiene solo la cadena de tiempo de ejecución (como se muestra arriba).

Para que esto funcione, debe haber activado la función de comstackción de usuario-env de Heroku labs. Ver https://devcenter.heroku.com/articles/labs-user-env-compile

Por defecto, virtualenv se almacena en caché entre despliegues.

Para evitar el almacenamiento en caché de paquetes puede ejecutar:

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

De esa manera, todo se construirá desde cero después de que empujes algunos cambios. Para habilitar el almacenamiento en caché, simplemente elimine la variable de configuración BUILDPACK_URL.

Ahora para desinstalar paquetes específicos:

  1. Elimine los registros correspondientes de requirements.txt ;
  2. Comete y presiona los cambios.

Gracias a Lincoln del equipo de soporte de Heroku por las aclaraciones.

He creado algunas recetas de fabfile para las respuestas de Maxime y Jesse que permiten volver a instalar los requisitos con un comando de fab: https://gist.github.com/littlepea/5096814 (mire las cadenas de documentación para obtener una explicación y ejemplos).

Para la respuesta de Maxime, he creado una tarea ‘heroku_clean’ (o ‘hc’), se verá algo así:

 fab heroku_clean 

O usando un alias y especificando una aplicación heroku:

 fab hc:app=myapp 

Para la respuesta de Jesse, he creado una tarea ‘heroku_runtime’ (o ‘hr’), establece el tiempo de ejecución de heroku python y confirma runtime.txt (también lo crea si no existiera):

 fab heroku_runtime:2.7.2 

Si no se pasa la versión en tiempo de ejecución, solo la alternará entre 2.7.2 y 2.7.3, por lo que la forma más fácil de cambiar y confirmar el tiempo de ejecución es:

 fab hr 

Luego, solo puede desplegar (empujar a origen heroku) su aplicación y se reconstruirá el virtualenv. También agregué una tarea ‘heroku_deploy’ (‘hr’) que uso para el empuje y escala de heroku que también puede ser usuario junto con la tarea ‘heroku_runtime’. Este es mi método preferido para implementar y reconstruir virtualenv: todo sucede en un comando y puedo elegir cuándo reconstruirlo, no me gusta hacerlo cada vez, como sugiere la respuesta de Maxime porque puede llevar mucho tiempo:

 fab hd:runtime=yes 

Esto es un equivalente de:

 fab heroku_runtime fab heroku_deploy