La reubicación del proyecto de entorno virtual del local al servidor (proyecto matraz), ¿tiene que instalar dependencias nuevamente?

He creado una aplicación de flask en un entorno virtual en mi máquina local y podría ejecutarla localmente (http://localhost:5000)

Luego puse este proyecto en un repository y luego fui a mi servidor y git cloné este proyecto.

Todos los archivos son idénticos en mi máquina local y en mi servidor.

Luego quise probar este entorno virtual en el servidor probando .venv/bin/active

Sin embargo me encontré con un error, dice que no tengo matraz !:

 Traceback (most recent call last): File "__init__.py", line 1, in  from flask import Flask ImportError: No module named flask 

¿Asumo que primero tengo que inicializar algo en el entorno virtual? – Me gusta instalar todas las dependencias ¿O tengo que volver a pip install flask ? – (Sería algo divertido hacer eso …)

Gracias.

Como regla general, los entornos de Python no son portátiles en todas las máquinas .

Esto significa que no puede esperar de manera confiable portar el entorno virtual a través de las máquinas. Esto es especialmente cierto si estás moviendo cosas entre diferentes sistemas operativos. Por ejemplo, un entorno virtual creado en Windows no funcionará en Linux.

Del mismo modo, un entorno virtual creado en OSX no funcionará en Linux. A veces, puede obtener compatibilidad Linux> Linux, pero esto es por casualidad y no se puede confiar en él.

Las razones son numerosas: algunas bibliotecas deben construirse contra extensiones nativas, otras requieren bibliotecas de sistemas compatibles para funcionar, etc.

Entonces, el flujo de trabajo más confiable es el siguiente:

  1. Puede (pero recomendaría esto) poner su entorno virtual en el mismo directorio que su proyecto. Si lo hace, asegúrese de no agregar el directorio raíz del entorno virtual a su sistema de control de origen. Es mejor separar sus entornos virtuales de su código fuente (consulte el proyecto de proyecto virtualenvwrapper para obtener una excelente manera de administrar sus entornos virtuales por separado).

  2. Debe crear un archivo de requisitos, ejecutando pip freeze > requirements.txt . Mantenga este archivo actualizado y agréguelo a su sistema de control de código fuente. En su sistema de destino, simplemente cree un entorno virtual vacío y luego pip install -r requirements.txt para asegurarse de que todos los requisitos estén instalados correctamente. Al hacerlo, se asegurará de que también se construyan e instalen las extensiones nativas.

Algunos problemas posibles:

  • Cuando creó su entorno virtual original, ¿especificó –no-site-packages si no su paquete puede estar utilizando elementos del sistema?
  • Algunos paquetes dependen de las bibliotecas instaladas en el sistema que pueden faltar en su sistema de destino
  • ¿Se está ejecutando su servidor en un conjunto de hardware similar a su sistema de desarrollo con el mismo sistema operativo? De lo contrario, es probable que su virtualenv no funcione sin reinstalar los paquetes, ya que cualquier extensión C / C ++ se habrá creado para el hardware / sistema operativo incorrecto y no trabajará.

El problema es que virtualenv no es un generador de paquetes (mira eso en pyinstaller), sino un entorno de desarrollo y prueba cuando distribuyes tu código a una nueva plataforma, siempre que hayas comenzado con –no-site- En los paquetes puede encontrar fácilmente qué paquetes necesita para saber qué necesita instalar en el nuevo destino.

Básicamente, , o más probablemente el administrador del sistema , necesita run pip install flask y probablemente muchas otras cosas.