2010-02-12 8 views
37

Tengo virtualenv y virtualenvwrapper instalados en un servidor Linux compartido con configuraciones predeterminadas (virtualenvs están en ~/.virtualenvs). Tengo varios scripts de Python que solo se pueden ejecutar cuando se activa el virtualenv correcto.Compartir scripts que requieren que se active un virtualenv

Ahora quiero cuota de esos guiones con otros usuarios en el servidor, pero sin que tengan que saber nada acerca de virtualenv ... para que puedan correr python scriptname o ./scriptname y la secuencia de comandos se ejecutará con las bibliotecas disponibles en mi virtualenv.

¿Cuál es la forma más limpia de hacer esto? He jugado con algunas opciones (como cambiar la línea shebang para apuntar al intérprete proporcionado virtualenv), pero parecen bastante inflexibles. ¿Alguna sugerencia?


Editar: Este es un servidor de desarrollo, donde varias personas tienen cuentas. Sin embargo, ninguno de ellos son programadores de Python (actualmente estoy tratando de convertirlos). Solo quiero que sea más fácil para ellos ejecutar estos scripts y posiblemente inspeccionar su lógica, sin exponer a los no Pythonistas a los detalles del entorno. Gracias.

+1

Un virtualenv es para las necesidades del desarrollador. Para probar cosas en un entorno aislado, probar dependencias, etc. Si lo distribuye, debe poder empaquetarlo como cualquier otro script/módulo de python y no requerir un virtualenv de su parte. ¿Qué hay en el virtualenv que es específico de este script que no se puede hacer en todo el sistema para un usuario final? – Rick

+0

@rharding - No estoy implementando las secuencias de comandos, solo poniéndolas a disposición de otros usuarios en el servidor. – Mzzzzzz

+0

Por favor, considere aceptar la respuesta de Chris Dukes, la que proporciona jcdyer no responde al problema (y el autor estuvo de acuerdo en que no es una buena respuesta), mientras que la otra explica el problema más una referencia rápida al virtualenv shebang - pregunta que estaba tratando de responder al encontrar este tema. Puede ayudar a otros aceptando la respuesta más votada. Gracias. – mpiskore

Respuesta

0

Si solo está en un servidor, la flexibilidad es irrelevante. Modificar el shebang Si le preocupa eso, haga una copia empaquetada e instalada en el servidor de desarrollo que no use el virtualenv. Una vez que está fuera de desarrollo, ya sea para usuarios locales o usuarios en Guatemala, virtualenv ya no es la herramienta adecuada.

+1

Gracias ... ¿cuál es la herramienta adecuada para la producción, entonces? –

+5

Esta no debería ser la respuesta aceptada a este problema. – boatcoder

+0

De acuerdo. Ya no apoyo esta respuesta. – jcdyer

6

Yo votaría por agregar una línea de shebang en scriptname apuntando al virtualenv python correcto. Simplemente diga a los usuarios la ruta completa al scriptname (o póngalo en su RUTA), y ni siquiera necesitan saber que es una secuencia de comandos de Python.

Si sus usuarios son programadores, entonces no entiendo por qué no les gustaría que conozcan/aprendan virtualenv.

+0

En realidad, creo que estoy de acuerdo con este segundo párrafo. Virtualenv es una herramienta increíble. Si intenta convertir a otros programadores, muéstreselos. Es fácil de usar, y hace cosas geniales. – jcdyer

+1

No estoy de acuerdo con el segundo párrafo, sin embargo. Programador que aún no se ha convertido a Python, no gastará el esfuerzo de leer sobre virtualenv. Parece fácil para Python-converts porque han gastado (invertido) una o dos horas jugando virtualenv hasta que se acostumbren a la idea y puedan usarla. Esa inversión es una barrera. –

100

Utilice la siguiente magia (5) al comienzo de la secuencia de comandos.

#!/usr/bin/env python 

Cambia qué virtualenv está activo y usará el python de ese virtualenv. Desactivar el virtualenv, todavía se ejecuta.

+7

Un virtualenv CAMBIA el pitón/usr/bin/env para apuntar a su virtualenv python. Así que esta es la manera correcta de ir –

+0

Gracias @ JonasGröger, esta explicación fue el bloque que falta en mi comprensión. –

Cuestiones relacionadas