Pregunta

Estoy escribiendo un script basado en Python para una aplicación Django repetitivo con virtualenv, pip, y la tela. Debe ser bastante sencillo, pero parece que no soy capaz de activar y ejecutar comandos en el virtualenv a través de la secuencia de comandos shell.

os.system('virtualenv %s --no-site-packages' % project_name)
os.system('source %s/bin/activate' % project_name)
os.system('easy_install pip')

Cuando se ejecuta, esta errores hacia fuera:

$ startproject+ -s false sample
New python executable in sample/bin/python
Installing setuptools............done.
/testing
Searching for pip
Best match: pip 0.4
Processing pip-0.4-py2.6.egg
pip 0.4 is already the active version in easy-install.pth
Installing pip script to /usr/local/bin
error: /usr/local/bin/pip: Permission denied

Es evidente que la línea source no se está ejecutando, pero ¿por qué? ¿Es un problema de concurrencia / roscado, o algo más profundo con virtualenv?

Gracias!

¿Fue útil?

Solución

Cada llamada os.system crea un nuevo proceso. Usted tendrá que asegurarse de que el activate y la easy_install se ejecutan en el mismo os.system o subprocess llamada.

Otros consejos

Cada llamada a os.system ejecuta el comando en una nueva subcapa, que tiene las mismas propiedades que el proceso original de Python.

Trate de poner los comandos en una cadena separada por punto y coma.

Pero no se utilice "fuente activar" en absoluto. No hace más que alterar su depósito ruta para poner primero el directorio bin del virtualenv. Supongo que la secuencia de comandos sabe el directorio del virtualenv que acaba de crear; todo lo que tiene que hacer es llamar _virtualenv_dir_ / bin / easy_install por ruta completa. O _virtualenv_dir_ / bin / python para ejecutar cualquier otro script en Python dentro del virtualenv.

También puede instalar virtualenvwrapper, y utilizar el gancho postmkvirtualenv. Yo lo uso para llevar automáticamente en copias nuevas de PIP y IPython en virtualenvs que creo (como yo no lo quiero usar mi sistema IPython). También lo uso para copiar pythonw en el virtualenv, de lo contrario las cosas a base de WX no funcionará. Se ve así:

easy_install pip
pip install -I ipython
cd ~/bin
python install_pythonw.py ${VIRTUAL_ENV}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top