what myenv make activate activar python flask virtualenv uwsgi

python - myenv - ¿Cómo ejecuto uwsgi con virtualenv



virtual env python 2 (5)

Como pointed usuario995394, hay una manera de decirle a UWSGI que use el entorno virtual existente. Sin embargo, cuando paso la opción uWSGI en la forma virtualenv = /full/path/to/my/virtualenv (es de la configuración de INI) se queja de ImportError: No module named site . La solución alternativa que encontré es que ejecutas uWSGI desde la carpeta donde está tu virtualenv y solo pasas virtualenv = my_virtualenv_name (es decir, la ruta es relativa).

Yo uso uWSGI 2.0.

Actualmente estoy desarrollando mi primer proyecto de matraz de python real y estoy a punto de configurar el servidor de compilación para implementar la "Última versión" que se basa en cada check-in.

He configurado un script de inicio donde inicio la aplicación usando uwsgi y esta parte funciona bien. Recientemente también he comenzado a usar virtualenv y, al hacerlo, los paquetes instalados se agregan a mi proyecto bajo projectname/flask/Lib/site-packages .

Estoy usando nginx como el servidor web y la configuración se ve así:

location / { try_files $uri @graderbuild; } location @graderbuild { include uwsgi_params; uwsgi_param UWSGI_CHDIR /usr/local/grader/build; uwsgi_param UWSGI_PYHOME /usr/local/grader/build; uwsgi_pass 127.0.0.1:3031; }

Estoy comenzando uwsgi usando esto:

exec /usr/local/bin/uwsgi --master --socket 127.0.0.1:3031 --wsgi-file restserver.py --callable app --processes 4 --die-on-term --threads 2 >> /var/log/grader-build.log 2>&1

Ahora, donde sé si lo estoy haciendo bien ... actualmente estoy implementando toda la carpeta en el servidor de compilación. No quiero instalar módulos globales de python solo para hacer que mi compilación funcione. ¿Bien o mal?

El error que recibo actualmente es:

ImportError: No module named flask_wtf

Si estoy en lo cierto, ¿cómo configuro la configuración para usar los paquetes de sitio virtualenv ? Mi ubicación preferida estaría en el script de startup y no en la configuración de nginx .


La respuesta de Beau resolvió este problema para mí.

Nunca encontré una buena explicación para las directivas de archivo ini de uwsgi.

Hasta la respuesta de Beau, nunca vi una respuesta a lo que explicitly debería establecerse el valor virtualenv: la raíz del árbol de python en el venv, la carpeta de la aplicación en site-packages o la raíz del VENV TREE. ¿Qué sucede si no está utilizando un servidor, qué es lo que establece en su hogar, en la parte superior del árbol de aplicaciones, en la parte superior de la carpeta bin de python, en la carpeta lib de Python o en dist-packages?

Tengo esta aplicación trabajando en otro sistema, por lo que realmente no debería haber sido tan difícil de ejecutar en un contenedor acoplador. Ahora que lo tengo funcionando revisé esa instalación en funcionamiento y ahora veo que apunta a la parte superior del árbol de venv. Estaba usando virtualenvwrapper allí, por lo que es un camino diferente que cuando se usa virtualenv.

Me hace preguntarme si es posible ejecutar esta aplicación sin el venv. Como esto se ejecutará en un contenedor acoplable, no hay realmente una buena razón para usar venvs, pero al observar las diferencias en la estructura de la carpeta python, son bastante diferentes entre el sistema python y venv python.

Python3 del sistema se divide en carpetas separadas y los archivos no están todos bajo una sola jerarquía, ya que están bajo un venv. Si instala sus paquetes con pip, terminarán en / usr / local / lib / python3 / dist-packages, y esa ubicación NO tiene carpetas site.py o codificaciones, razón por la cual tantos tienen errores de importación.

Después de solo unas pocas pruebas, descubrí que para ejecutar mi aplicación sin esperar, el uwsgi ini NO debe definir la configuración de inicio ni de virtualenv. Si la ruta del sistema incluye / usr / bin AND / usr / local / bin, debería funcionar y encontrar todo, incluso si los paquetes instalados en pip van a otro lugar con una jerarquía de carpetas diferente.


Para usar el virtualenv activado, puede usar este fragmento de configuración en su uwsgi.ini :

; If VIRTAL_ENV is set then use its value to specify the virtualenv directory if-env = VIRTUAL_ENV virtualenv = %(_) endif =


Tuve este problema hace unos meses y tengo un ejemplo completo de configuraciones de demostración aquí, incluido nginx, uwsgi que se inicia automáticamente con upstart en Linux.

https://.com/a/27221427/567606