Entorn virtual source venv/bin/activate

Molt bona pregunta! T’ho explico pas a pas:

Què fa source venv/bin/activate?

Aquesta comanda té dues parts:

1. source (o el seu equivalent .)

És una ordre interna de la terminal (bash) que diu:

«Llegeix aquest fitxer i executa les ordres que hi ha dins, com si les hagués escrit jo mateix a la terminal.»

És a dir, en lloc d’obrir el fitxer com un programa independent, el sistema llegeix les instruccions i les aplica al teu entorn actual.

2. venv/bin/activate

És el fitxer que conté les instruccions per «activar» l’entorn virtual. Quan l’executes, fa diverses coses:

  • Modifica el PATH: Li diu al sistema «quan executis python o pip, fes servir els que hi ha dins de venv/bin/, no els del sistema global».
  • Canvia el prompt: Afegeix (venv) al principi de la línia d’ordres perquè sàpigues que ets dins l’entorn virtual.
  • Defineix variables d’entorn: Configura VIRTUAL_ENV perquè Python sàpiga que està treballant en un entorn aïllat.

Per què és necessari?

Imagina que tens dos projectes Python:

  • Projecte A necessita la versió 1.0 d’una llibreria
  • Projecte B necessita la versió 2.0 de la mateixa llibreria

Si instal·lessis tot al sistema global, hi hauria conflictes. L’entorn virtual crea un «espai aïllat» per a cada projecte, on pots tenir les versions que necessitis sense que es barregin.

Quan fas source venv/bin/activate, li estàs dient al sistema:

«A partir d’ara, tots els paquets de Python que instal·li o utilitzi, fes-los servir d’aquesta carpeta venv, no del sistema global.»


Com crear-lo?

Comencem de zero:

# 1. Esborra l'entorn virtual existent
rm -rf venv

# 2. Verifica que Python3 està disponible
python3 --version

# 3. Crea un nou entorn virtual
python3 -m venv venv

# 4. Activa l'entorn virtual
source venv/bin/activate

# 5. Verifica que està activat (hauries de veure (venv) al prompt)
which python
which pip

Recorda per a futures sessions SSH

Cada vegada que et connectis al Synology per SSH i vulguis treballar amb el projecte, hauràs d’activar l’entorn:

cd /volume2/web/polidic
source venv/bin/activate
cd /volume2/web/polidic
source venv/bin/activate

deactivate

Instal·lar els paquets que necessitis

pip freeze > requirements.txt

Així, si algun dia has de recrear l’entorn, només hauràs de fer:

pip install -r requirements.txt

Com ho desactivo?

Quan acabis de treballar, simplement escrius:

deactivate

I el teu prompt tornarà a la normalitat (sense el (venv) al davant).


Ara que ja tens l’entorn activat (veiem el (venv) al teu prompt), ja pots executar:

./provar_en.sh

I l’script farà servir les llibreries de Python que hi ha dins de venv, no les del sistema global.

hem de matar el port el procés del port 5040:

sudo netstat -tulnp | grep 5040

sudo kill 14313 (el procés proporcionat a dalt)

(venv) urqtejmi@Synology_sec:/volume1/web/python_server$ sudo kill 14313
(venv) urqtejmi@Synology_sec:/volume1/web/python_server$

Instal·la les llibreries necessàries:

pip install gtts flask

./provar_en.sh
ls -lh *.mp3
Idiomalang
Catalàca
Anglèsen
Espanyoles
Francèsfr
Italiàit
Alemanyde
Portuguèspt
Neerlandèsnl

Sí. Aquí hi ha un punt important: Python no s’instal·la dins del venv. El que fem és crear el venv utilitzant el Python 3.12 que acabes d’instal·lar amb SynoCommunity. Així, quan activis venv, el python3 que veuràs serà el 3.12.

Ara mateix tens:

(venv) urqtejmi@synology_vall:/volume2/web/polidic$
which python3
/volume2/web/polidic/venv/bin/python3

Primer, sense tocar res, comprovaria quin Python 3.12 ha instal·lat SynoCommunity:

which python3.12
python3.12 --version

Si surt Python 3.12.x

Jo faria una còpia del venv actual i en crearia un de nou amb Python 3.12:

cd /volume2/web/polidic

Desactiva el venv actual:

deactivate

Fes una còpia de seguretat:

mv venv venv_old

Ara crea el nou venv amb Python 3.12:

python3.12 -m venv venv

Activa’l:

source venv/bin/activate

I comprova:

which python3
python3 --version

Hauria de sortir aproximadament:

/volume2/web/polidic/venv/bin/python3
Python 3.12.x

🎯 Això és exactament el que busquem.

Després instal·larem les llibreries

Una vegada confirmem que funciona:

python3 -m pip --version

i:

python3 -m pip list

Llavors podrem instal·lar al nou entorn Python 3.12 les llibreries que necessites per al teu projecte polidic, per exemple Flask, gTTS, etc., sense barrejar-les amb el Python del sistema.

No eliminaria encara venv_old, perquè així conservem l’entorn anterior per si alguna llibreria del Polidic depèn de la versió antiga.

Fes ara només aquestes dues:

which python3.12
python3.12 --version

i passa’m el resultat. A partir d’aquí et dono les ordres exactes per al Synology.