{"id":19223,"date":"2026-09-26T17:10:06","date_gmt":"2026-09-26T15:10:06","guid":{"rendered":"https:\/\/www.beseit.net\/?p=19223"},"modified":"2026-10-01T08:23:52","modified_gmt":"2026-10-01T06:23:52","slug":"entorn-virtual-source-venv-bin-activate","status":"publish","type":"post","link":"https:\/\/www.beseit.net\/?p=19223","title":{"rendered":"Entorn virtual source venv\/bin\/activate"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Molt bona pregunta! T&#8217;ho explico pas a pas:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e8 fa <code>source venv\/bin\/activate<\/code>?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aquesta comanda t\u00e9 dues parts:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <code>source<\/code> (o el seu equivalent <code>.<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9s una ordre interna de la terminal (bash) que diu:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u00abLlegeix aquest fitxer i executa les ordres que hi ha dins, <strong>com si les hagu\u00e9s escrit jo mateix a la terminal<\/strong>.\u00bb<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9s a dir, en lloc d&#8217;obrir el fitxer com un programa independent, el sistema llegeix les instruccions i les aplica al teu entorn actual.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. <code>venv\/bin\/activate<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9s el fitxer que cont\u00e9 les instruccions per \u00abactivar\u00bb l&#8217;entorn virtual. Quan l&#8217;executes, fa diverses coses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Modifica el PATH<\/strong>: Li diu al sistema \u00abquan executis <code>python<\/code> o <code>pip<\/code>, fes servir els que hi ha dins de <code>venv\/bin\/<\/code>, no els del sistema global\u00bb.<\/li>\n\n\n\n<li><strong>Canvia el prompt<\/strong>: Afegeix <code>(venv)<\/code> al principi de la l\u00ednia d&#8217;ordres perqu\u00e8 s\u00e0pigues que ets dins l&#8217;entorn virtual.<\/li>\n\n\n\n<li><strong>Defineix variables d&#8217;entorn<\/strong>: Configura <code>VIRTUAL_ENV<\/code> perqu\u00e8 Python s\u00e0piga que est\u00e0 treballant en un entorn a\u00efllat.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Per qu\u00e8 \u00e9s necessari?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Imagina que tens dos projectes Python:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Projecte A<\/strong> necessita la versi\u00f3 1.0 d&#8217;una llibreria<\/li>\n\n\n\n<li><strong>Projecte B<\/strong> necessita la versi\u00f3 2.0 de la mateixa llibreria<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si instal\u00b7lessis tot al sistema global, hi hauria conflictes. L&#8217;entorn virtual crea un \u00abespai a\u00efllat\u00bb per a cada projecte, on pots tenir les versions que necessitis sense que es barregin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quan fas <code>source venv\/bin\/activate<\/code>, li est\u00e0s dient al sistema:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u00abA partir d&#8217;ara, tots els paquets de Python que instal\u00b7li o utilitzi, fes-los servir d&#8217;aquesta carpeta <code>venv<\/code>, no del sistema global.\u00bb<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Com crear-lo?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#fa1919\" class=\"has-inline-color\">Comencem de zero:<\/mark><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># 1. Esborra l'entorn virtual existent\nrm -rf venv\n\n# 2. Verifica que Python3 est\u00e0 disponible\npython3 --version\n\n# 3. Crea un nou entorn virtual\npython3 -m venv venv\n\n# 4. Activa l'entorn virtual\nsource venv\/bin\/activate\n\n# 5. Verifica que est\u00e0 activat (hauries de veure (venv) al prompt)\nwhich python\nwhich pip<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f00f0f\" class=\"has-inline-color\">Recorda per a futures sessions SSH<\/mark><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada vegada que et connectis al Synology per SSH i vulguis treballar amb el projecte, haur\u00e0s d&#8217;activar l&#8217;entorn:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/volume2\/web\/polidic\nsource venv\/bin\/activate<\/code><\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd \/volume2\/web\/polidic\nsource venv\/bin\/activate<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"wp-block-code\"><code>deactivate<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Instal\u00b7lar els paquets que necessitis<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip freeze &gt; requirements.txt<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Aix\u00ed, si algun dia has de recrear l&#8217;entorn, nom\u00e9s haur\u00e0s de fer:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install -r requirements.txt<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Com ho desactivo?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quan acabis de treballar, simplement escrius:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">deactivate<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I el teu prompt tornar\u00e0 a la normalitat (sense el <code>(venv)<\/code> al davant).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Ara que ja tens l&#8217;entorn activat (veiem el <code>(venv)<\/code> al teu prompt), ja pots executar:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">.\/provar_en.sh<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I l&#8217;script far\u00e0 servir les llibreries de Python que hi ha dins de <code>venv<\/code>, no les del sistema global.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"688\" height=\"326\" src=\"https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/09\/imatge-2.png\" alt=\"\" class=\"wp-image-19225\" srcset=\"https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/09\/imatge-2.png 688w, https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/09\/imatge-2-300x142.png 300w, https:\/\/www.beseit.net\/wp-content\/uploads\/2026\/09\/imatge-2-500x237.png 500w\" sizes=\"auto, (max-width: 688px) 100vw, 688px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">hem de matar el port el proc\u00e9s del port 5040:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">sudo netstat -tulnp | grep 5040<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">sudo kill 14313 (el proc\u00e9s proporcionat a dalt)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(venv) urqtejmi@Synology_sec:\/volume1\/web\/python_server$ sudo kill 14313<br>(venv) urqtejmi@Synology_sec:\/volume1\/web\/python_server$<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instal\u00b7la les llibreries necess\u00e0ries:<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ea1010\" class=\"has-inline-color\">pip install gtts flask<\/mark><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">.\/provar_en.sh\nls -lh *.mp3<\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Idioma<\/th><th><code>lang<\/code><\/th><\/tr><\/thead><tbody><tr><td>Catal\u00e0<\/td><td><code>ca<\/code><\/td><\/tr><tr><td>Angl\u00e8s<\/td><td><code>en<\/code><\/td><\/tr><tr><td>Espanyol<\/td><td><code>es<\/code><\/td><\/tr><tr><td>Franc\u00e8s<\/td><td><code>fr<\/code><\/td><\/tr><tr><td>Itali\u00e0<\/td><td><code>it<\/code><\/td><\/tr><tr><td>Alemany<\/td><td><code>de<\/code><\/td><\/tr><tr><td>Portugu\u00e8s<\/td><td><code>pt<\/code><\/td><\/tr><tr><td>Neerland\u00e8s<\/td><td><code>nl<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed. Aqu\u00ed hi ha un punt important: <strong>Python no s&#8217;instal\u00b7la dins del <code>venv<\/code><\/strong>. El que fem \u00e9s crear el <code>venv<\/code> <strong>utilitzant el Python 3.12 que acabes d&#8217;instal\u00b7lar amb SynoCommunity<\/strong>. Aix\u00ed, quan activis <code>venv<\/code>, el <code>python3<\/code> que veur\u00e0s ser\u00e0 el 3.12.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ara mateix tens:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">(venv) urqtejmi@synology_vall:\/volume2\/web\/polidic$\nwhich python3\n\/volume2\/web\/polidic\/venv\/bin\/python3<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Primer, sense tocar res, comprovaria quin Python 3.12 ha instal\u00b7lat SynoCommunity:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">which python3.12\npython3.12 --version<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Si surt Python 3.12.x<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jo faria una c\u00f2pia del <code>venv<\/code> actual i en crearia un de nou amb Python 3.12:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd \/volume2\/web\/polidic<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Desactiva el <code>venv<\/code> actual:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">deactivate<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fes una c\u00f2pia de seguretat:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mv venv venv_old<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ara crea el nou <code>venv<\/code> amb <strong>Python 3.12<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3.12 -m venv venv<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Activa&#8217;l:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">source venv\/bin\/activate<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I comprova:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">which python3\npython3 --version<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hauria de sortir aproximadament:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/volume2\/web\/polidic\/venv\/bin\/python3\nPython 3.12.x<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83c\udfaf <strong>Aix\u00f2 \u00e9s exactament el que busquem.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Despr\u00e9s instal\u00b7larem les llibreries<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una vegada confirmem que funciona:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 -m pip --version<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">i:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 -m pip list<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Llavors podrem instal\u00b7lar al <strong>nou entorn Python 3.12<\/strong> les llibreries que necessites per al teu projecte <code>polidic<\/code>, per exemple Flask, gTTS, etc., sense barrejar-les amb el Python del sistema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>No eliminaria encara <code>venv_old<\/code><\/strong>, perqu\u00e8 aix\u00ed conservem l&#8217;entorn anterior per si alguna llibreria del Polidic dep\u00e8n de la versi\u00f3 antiga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fes ara nom\u00e9s aquestes dues:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">which python3.12\npython3.12 --version<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">i passa&#8217;m el resultat. A partir d&#8217;aqu\u00ed et dono les ordres exactes per al Synology.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Molt bona pregunta! T&#8217;ho explico pas a pas: Qu\u00e8 fa source venv\/bin\/activate? Aquesta comanda t\u00e9 dues parts: 1. source (o el seu equivalent .) \u00c9s una ordre interna de la terminal (bash) que diu: \u00abLlegeix aquest fitxer i executa les &hellip; <a href=\"https:\/\/www.beseit.net\/?p=19223\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":3167,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[207,1],"tags":[],"class_list":["post-19223","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deepin-linux","category-bloc-de-notes"],"_links":{"self":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19223"}],"version-history":[{"count":13,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19223\/revisions"}],"predecessor-version":[{"id":19267,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/19223\/revisions\/19267"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/media\/3167"}],"wp:attachment":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19223"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19223"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}