jueves, 14 de noviembre de 2024

Python Crear un fichero bat (windows) que utilice un entorno virtual y ejecute un programa python

0. Introducción

Se pretende que la máquina cliente pueda ejecutar un programa en el servidor sin tener instalado python localmente. Para ello se realizan los siguientes pasos:
  1. Instalar WinPython que es un ejecutable que no requiere instalación de librerías.
  2. Crear un entorno virtual de WinPython
  3. Crea un fichero batch que active el entorno virtual y ejecute el programa python en cuestión 

1. Instalar WinPython

Se descarga en la carpeta compartida del servidor. En mi caso el fichero es Winpython64-3.12.4.1.exe

Ejecutamos dicho fichero, el cual crea a carpeta WPy64-31241

Dentro de dicha carpeta hay varias carpetas (n, notebooks, python-3.12.4.amd64, scripts, settings y t) y varios ficheros.

2. Crear entorno virtual

Supongamos que se ha compartido para ello una carpeta en el servidor y la hemos mapeado a la unidad Y, y queremos que el entorno virtaul esté en Y:\weenv

El ejecutable de python está en la carpeta python-3.12.4.amd64, Nos situamos en dicha carpeta y ejecutamos

Y:\WPy64-31241\python-3.12.4.amd64>python.exe -m venv Y:\wvenv

y contesta

Actual environment location may have moved due to redirects, links or junctions.
  Requested location: "Y:\wvenv\Scripts\python.exe"
  Actual location:    "\\srv-softprop2\Prog_PY\wvenv\Scripts\python.exe"

Activamos el entorno virtual e instalamos las dependencias:

Y:\venv\Scripts\activate.bat
pip install -r requirements.txt

Si no tenemos el requirements, podemos ejecutr una a una utilizando "pip install dependencia"

3. Crear el script que activa el entorno virtual y ejecuta dicho programa

Según ChatGPT tenemos este script (menu_soft.bat) que activando el entorno virtual venv ejecuta el programa python menu_soft.py

El "pause" que hay al final hay que quitarlo una vez comprabado que funcione el script.

Hay algunos ordenadores que no va bien dicho script y no he averiguado porqué.

@echo off

REM No podem fer un cd //server01/Prog_PY. Conseguir la carpeta del programa
set SCRIPT_FOLDER=%~dp0
pushd %SCRIPT_FOLDER%

REM Path to the virtual environment
set WINPYTHON_ACTIVATE=wvenv\Scripts\activate.bat

REM Path to Python.exe
set PYTHON_EXE=wvenv\Scripts\python.exe

REM Path to the Python program
set PYTHON_PROGRAM=menu_tk.py

REM Activate the virtual environment
call %WINPYTHON_ACTIVATE% 

REM Check if activation succeeded
if errorlevel 1 (
    echo Failed to activate virtual environment.
    exit /b 1
)

call %PYTHON_EXE% %PYTHON_PROGRAM%

REM Deactivate the virtual environment
deactivate

pause


4. Crear un acceso directo en el ordenador del cliente

Supongamos que el servidor tien de nombre "server01", y la carpeta compartida tiene el nombre "Prog_PY"

Ahora en el ordenador cliente mapeamos una unidad de red a la carpeta compartida de este servidor:

  1. Conectar a una unidad de red
  2. Le damos el valor de la unidad "P" que será la que deben tener cualquier ordenador que quiera ejecutar el programa. Pued3e ser otra letra, pero será la misma para todos los ordenadores que se conecten.
  3. La ruta remota a mapear esta letra "P" es //server01/Prog_PY tal como hemos dicho
Ahora tenenos que crear un acceso directo a ese fichero bat y lo metemos en el escritorio. La ruta será

P:/menu_soft.bat





Y si ejecutamos aparece la pantallita:








No hay comentarios :

Publicar un comentario