Venv’s

Introducció

En el desenvolupament de projectes amb Python, l’ús d’entorns virtuals (venv) és una pràctica recomanada. Aquest document destaca els beneficis de treballar amb venv, com crear un entorn virtual a Linux i com instal·lar-hi les dependències.

Warning

Si et surt un error indicant que el nombre de variables de CPLEX està limitat, és que no has creat el venv usant l’script especial per a crear el venv de Multivac, que és mvac_crear_venv. Aquest script el que fa és parsejar el binari de CPLEX amb la llicència educativa per a Python 3.10 amb el de Python 3.11 que és el que hi ha al clúster.

Beneficis de l’ús d’Entorns Virtuals

Els entorns virtuals ofereixen diversos avantatges:

  1. Aïllament de Dependències: - Permet mantenir les dependències del projecte separades d’altres projectes, evitant conflictes entre versions de llibreries.

  2. Reproduibilitat: - Facilita la reproducció exacta de l’entorn de desenvolupament en diferents màquines, assegurant coherència en el desenvolupament.

  3. Neteja i Organització: - Simplifica la gestió de dependències i facilita la neteja del projecte al finalitzar o al distribuir-lo.

  4. Facilita les Actualitzacions: - Permet actualitzar o canviar dependències de forma independent per a cada projecte sense afectar la configuració global del sistema.

Creació d’un Entorn Virtual a Linux

  1. Obre una Terminal: - Utilitza la terminal del sistema o una terminal integrada al teu entorn de desenvolupament.

  2. Navega a la Carpeta del Projecte:

$ cd /ruta/al/teu/projecte
  1. Crea l’entorn virtual:

$ python3 -m venv nom_de_la_carpeta_venv
  1. Activa l’entorn virtual:

$ source nom_de_la_carpeta_venv/bin/activate

5.1. Instal·la les dependències dins del venv(si cal):

(venv)$ pip install nom_de_la_dependencia

5.2. Instal·la les dependències dins del venv amb un requirements.txt(si cal):

(venv)$ pip install -r requirements.txt

Simplificació de la creació d’un Entorn Virtual a Linux

Hem preparat un script que et permet crear un venv i instal·lar les dependències de forma automàtica i afegint la llicència de CPLEX al venv:

$ mvac_crear_venv

Com activar el venv?

Per a activar el venv hem de fer:

$ source venv/bin/activate

Com podem veure que estem dins el venv?

Ens apareixerà el nom del nostre venv abans de l’usuari:

(venv) nom.usuari@servidor:~/$

Com desactivar el venv?

Per a activar el venv hem de fer (dins del venv):

(venv)$ deactivate

Què és un requirements.txt

El fitxer requirements.txt és una part crucial en el desenvolupament en Python. Serveix per gestionar les dependències del projecte, garantir la coherència en l’entorn de desenvolupament i simplificar la gestió de les versions dels paquets.

Proporciona els següents avantatges:

  • Proporciona una llista detallada de les dependències del projecte, incloent-hi les versions dels paquets utilitzades. Això permet reproduir fàcilment l’entorn de desenvolupament en altres sistemes.

  • Mitjançant el contingut del fitxer requirements.txt, és possible instal·lar totes les dependències del projecte d’una sola vegada. Aquesta funcionalitat és útil per configurar nous entorns de desenvolupament o per desplegar l’aplicació en servidors.

  • Les versions dels paquets especificades al fitxer requirements.txt ajuden a mantenir la coherència en el desenvolupament del projecte. Tots els membres de l’equip utilitzen les mateixes versions dels paquets, evitant problemes de compatibilitat.

  • Mantenir actualitzat el fitxer requirements.txt facilita el seguiment i la gestió de les dependències. Afegir, actualitzar o eliminar una dependència és senzill i transparent amb aquest fitxer.

Com generem el requirements.txt del nostre projecte?

Dins del nostre virtual environment executar la comanda:

(venv)$ pip freeze > requirements.txt

Ara, el fitxer “requirements.txt” contindrà una llista de totes les dependències del teu projecte juntament amb les seves versions.

Com instal·lem mitjançant un requirements.txt?

Dins del nostre virtual environment executar la comanda:

(venv)$ pip install -r requirements.txt

Ara, el fitxer “requirements.txt” contindrà una llista de totes les dependències del teu projecte juntament amb les seves versions.

Exemple de fitxer requirements.txt

Per a instal·lar les dependencies necessàries pel teu projecte, pots utilitzar un fitxer requirements.txt. Aquí tens un exemple que inclou les llibreries docplex, pandas i numpy:

cplex==22.1.1.1
docplex==2.25.236
numpy==1.26.2
pandas==2.1.4

Aquest fitxer especifica les versions exactes de les llibreries que vols instal·lar. Pots adaptar aquest fitxer segons les necessitats específiques del teu projecte. Quan utilitzis aquest fitxer amb l’script anterior per crear i configurar l’entorn virtual, les versions especificades es instal·laran a l’entorn virtual del teu projecte.

Exemple de creació de venv a Windows

Aquest script busca si està instal·lat Python, sinó l’instal·la.

Després busca si existeix un venv i si no existeix el crea amb els requirements.txt.

Per últim executa un script python dins del venv.

Guarda el contingut d’aquest fitxer a un script anomenat el_meu_script.ps1

# Comprova si Python està instal·lat
if (-not (Get-Command python.exe -ErrorAction SilentlyContinue)) {
   # Si no està instal·lat, descarrega i instal·la Python
   Write-Host "Python no està instal·lat. Descarrega i instal·la el fitxer que s'obrirà. Recorda marcar que afegeixi la variable PATH al sistema"
   Start-Process -FilePath "https://www.python.org/ftp/python/3.11.2/python-3.11.2-amd64.exe" -ArgumentList "/quiet", "/norestart" -Wait
   # Muestra un mensaje por terminal
   Write-Host "Presiona Enter un cop estigui instal·lat..."
   #Línia per a esperar l'enter
   $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

}

# Comprova si existeix un entorn virtual
$virtualEnvPath = Join-Path $PSScriptRoot 'venv'
Write-Host $virtualEnvPath
if (-not (Test-Path $virtualEnvPath)) {
   # Si no existeix, crea un entorn virtual
   Write-Host "Creant un entorn virtual..."
   python -m venv $virtualEnvPath
   $activateScript = Join-Path $virtualEnvPath 'Scripts\Activate.ps1'
   if (Test-Path $activateScript) {
      Write-Host "Instal·lant els requisits..."
      & $activateScript
      # Instal·la els requirements.txt
      pip install -r (Join-Path $PSScriptRoot 'requirements.txt')
      # Desactiva l'entorn virtual
      & $activateScript | Out-Null
   }
}

# Activa l'entorn virtual
$activateScript = Join-Path $virtualEnvPath 'Scripts\Activate.ps1'
if (Test-Path $activateScript) {
   & $activateScript
   # Executa l'script de Python
   if (Test-Path (Join-Path $PSScriptRoot 'main.py')) {
      python (Join-Path $PSScriptRoot 'main.py')
   } else {
      Write-Host "No s'ha trobat main.py a l'ubicació actual."
   }
} else {
   Write-Host "No s'ha pogut activar l'entorn virtual. Assegura't que està creat correctament."
}

Per a activar manualment el venv fem:

$ venv/Source/Activate.bat