El vie., 22 mar. 2019 a las 11:11, Pixu Kideak (<pixukid...@gmail.com>)
escribió:

> Buenos días,
>
> Estoy aprendiendo Python, he realizado algún script que utiliza algunas
> librerias de terceros que los he puesto en marcha con PIP y tengo
> funcionando el programa en un servidor.
> Me gustaría saber cual es la mejor manera para poder hacer funcionar el
> desarrollo en otros servidores con distintas arquitecturas (x32, x64) y
> distintos sistemas operativos.
>
> En un principio he pensado que podría instalar Python y las librerias en
> los distintos servidores y después copiar los scripts; pero quiero pensar
> que existe alguna manera de automatizar este proceso o realizarlo de manera
> más elegante.
>
>
Al usar distintas arquitecturas, dependerá mucho de los módulos que vayas a
instalar y si requieren de librerías del sistema aparte de las que usa
python.

Como norma principal: nunca modifiques el entorno python del sistema
operativo. Cambiar las versiones de python y sus módulos podrían afectar al
funcionamiento del sistema. Crea entornos virtuales tal como te comenta
Ángel Lis en otro mensaje. Lo bueno de un entorno virtual es que puedes
poder la versión de python que necesites (por ejemplo, usar python 3.6 en
tu aplicación mientras el sistema sigue usando python 2.7).

Para crear entornos virtuales, te recomiendo conda 4.6. Es un instalador de
paquetes python que también instala dependencias, librerías nativas e,
incluso, librerías de R y ruby. El módulo menv (que te recomienda Ángel
Lis) está bien para instalar paquetes 100% python, pero tiene dos graves
incovenientes:

   1. Requiere de un entorno de desarrollo para compilar algunas
   dependencias
   2. La lista de paquetes que saca pip freeze puede ser difícil de
   reproducir de un sistema operativo a otro

Crear un entorno de desarrollo en linux no es mayor problema; pero si usas
windows puede que tengas dificultades para que compilen cierto ciertos
módulos.
En cuanto a la lista de paquetes que genera pip freeze, puede ser demasiado
extensa. Lo normal es que tu aplicación sólo dependa de unos pocos
paquetes, y el resto sea parte del sistema.

Conda dispone de librerías ya compiladas para los sistemas operativos
habituales. Además minimiza el listado de paquetes a instalar para recrear
un entorno.

Ejemplo de una sesión:
$ conda create -n mientorno python==3.6 flask
$ conda activate mientorno
(mientorno) $ python
>>>

Para recrear el entorno en otra máquina. En origen:
$ conda env export -n mientorno > environment.yml

En la otra máquina:
$ conda env create -f environment.yml

Para los despliegues (y control remoto) recomiendo fabric+invoke. El uso de
Ansible y similares lo veo más para cuando se tiene un gran número de
entornos a gestionar (aunque también es factible usar fabric por encima de
ansible para hacer más simple su uso).

[conda]: https://conda.io
[invoke]: https://www.pyinvoke.org/
[fabric]: http://www.fabfile.org/


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a