{"title":"Tutorial avanzato: Come scrivere applicazioni riutilizzabili","version":"4.2","locale":"it","docname":"intro/reusable-apps","url":"/it/4.2/intro/reusable-apps/","canonical":"https://djangodocs.dev/it/4.2/intro/reusable-apps/","summary":"This advanced tutorial begins where Tutorial 8 left off. We’ll be turning our web-poll into a standalone Python package you can reuse in new projects and share with…","html":"<h1>Tutorial avanzato: Come scrivere applicazioni riutilizzabili<a class=\"heading-anchor\" href=\"#advanced-tutorial-how-to-write-reusable-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>This advanced tutorial begins where <a class=\"reference internal\" href=\"/it/4.2/intro/tutorial08/\"><span class=\"doc\">Tutorial 8</span></a>\nleft off. We’ll be turning our web-poll into a standalone Python package\nyou can reuse in new projects and share with other people.</p>\n<p>Se non hai completato di recente i Tutorial 1–7, ti invitiamo a rivederli in modo che il tuo progetto di esempio corrisponda a quello descritto di seguito.</p>\n<section id=\"reusability-matters\">\n<h2>La riusabilità è importante<a class=\"heading-anchor\" href=\"#reusability-matters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ci vuole molto lavoro per progettare, costruire, testare e manutenere una applicazione web. Alcuni progetti in Python e Django condividono problemi comuni.\nNon sarebbe fantastico se potessimo risparmiare parte di questo lavoro ripetuto?</p>\n<p>La riusabilità è uno stile di vita in Python. Il Python Package Index (PyPI) &lt;https://pypi.org/&gt; offre una vasta gamma di package che puoi usare nei tuoi programmi Python. Dai un’occhiata agli <a class=\"reference external\" href=\"https://djangopackages.org\">Django Packages</a> per trovare app riutilizzabili da incorporare nei tuoi progetti. Django stesso è un normale package. Questo significa che puoi prendere package Django esistenti o app Django e comporli nel tuo progetto web. Devi solo scrivere le parti che rendono il tuo progetto unico.</p>\n<p>Diciamo che tu stia iniziando un nuovo progetto che necessita di una applicazione di questionari come quella su cui abbiamo lavorato. Come rendi quest’app riutilizzabile? Fortunatamente, sei già un passo avanti. Nel <a class=\"reference internal\" href=\"/it/4.2/intro/tutorial01/\"><span class=\"doc\">Tutorial 1</span></a>, abbiamo detto come disaccoppiare polls dalla configurazione delle URL a livello di progetto usando <code class=\"docutils literal notranslate\"><span class=\"pre\">include</span></code>. In questo tutorial, faremo altri passi per rendere l’app facilmente utilizzabile in progetti nuovi e pronta da pubblicare affinchè altri possano installarla ed usarla.</p>\n<aside class=\"admonition-package-app admonition\">\n<p class=\"admonition-title\">Package? App?</p>\n<p>Un  <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-package\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">package</span></a>  di Python fornisce una modo di raggruppare codice Python correlato per un riutilizzo piu semplice. Un package contiene uno o piu file scritti in Python ( conosciuti anche come «modules» ).</p>\n<p>Un package puo essere importato con  <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span> <span class=\"pre\">foo.bar</span></code> oppure <code class=\"docutils literal notranslate\"><span class=\"pre\">from</span> <span class=\"pre\">foo</span> <span class=\"pre\">import</span> <span class=\"pre\">bar</span></code>. Per una cartella ( come <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>) per creare un package, deve contenere un file speciale <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__.py</span></code>, anche se questo file puo restare vuoto.</p>\n<p>Un «applicazione» Django è un package Python che ha lo specifico scopo di essere usato in un progetto Django. Un” applicazione puo” useare convenzioni comuni di Django, come avere <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">tests</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">urls</span></code>, e <code class=\"docutils literal notranslate\"><span class=\"pre\">views</span></code>  sottomoduli.</p>\n<p>Più tardi usiamo il termine <em>packaging</em> per descrivere il processo di costruire un pacchetto python facile dagli altri per installare. Può essere un pochino confusonario, lo sappiamo</p>\n</aside>\n</section>\n<section id=\"your-project-and-your-reusable-app\">\n<h2>Il tuo progetto e la tua applicazione riutilizzabile<a class=\"heading-anchor\" href=\"#your-project-and-your-reusable-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>After the previous tutorials, our project should look like this:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>mysite/\n    manage.py\n    mysite/\n        __init__.py\n        settings.py\n        urls.py\n        asgi.py\n        wsgi.py\n    polls/\n        __init__.py\n        admin.py\n        apps.py\n        migrations/\n            __init__.py\n            0001_initial.py\n        models.py\n        static/\n            polls/\n                images/\n                    background.gif\n                style.css\n        templates/\n            polls/\n                detail.html\n                index.html\n                results.html\n        tests.py\n        urls.py\n        views.py\n    templates/\n        admin/\n            base_site.html\n</code></pre></div>\n<p>Hai creato mysite/templates in <span class=\"xref std std-doc\">Tutorial 7 &lt;/intro/tutorial07&gt; e `polls/templates`</span> in :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Tutorial 3 &lt;/intro/tutorial03&gt;. Ora forse è più chiaro perchè abbiamo scelto di separare le directories con i template tra progetto e applicazione: tutto ciò che fa parte dell’applicazione «polls» è dentro «polls». Questo rende l’applicazione più facile da rilasciare in un nuovo progetto poichè contiene tutte le informazioni dentro di se.</p>\n<p>La directory <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> può essere copiata in un nuovo progetto Django e immediatamente riutilizzata. Non è completamente pronta per essere pubblicata. Per questo, dobbiamo creare un pacchetto dall’app per semplificare l’installazione da parte di altri.</p>\n</section>\n<section id=\"installing-some-prerequisites\">\n<span id=\"installing-reusable-apps-prerequisites\"></span><h2>Installazione di alcuni prerequisiti<a class=\"heading-anchor\" href=\"#installing-some-prerequisites\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The current state of Python packaging is a bit muddled with various tools. For\nthis tutorial, we’re going to use <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/setuptools/\">setuptools</a> to build our package. It’s\nthe recommended packaging tool (merged with the <code class=\"docutils literal notranslate\"><span class=\"pre\">distribute</span></code> fork). We’ll\nalso be using <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/pip/\">pip</a> to install and uninstall it. You should install these\ntwo packages now. If you need help, you can refer to <a class=\"reference internal\" href=\"/it/4.2/topics/install/#installing-official-release\"><span class=\"std std-ref\">how to install\nDjango with pip</span></a>. You can install <code class=\"docutils literal notranslate\"><span class=\"pre\">setuptools</span></code>\nthe same way.</p>\n</section>\n<section id=\"packaging-your-app\">\n<h2>Pacchettizzare la tua applicazione<a class=\"heading-anchor\" href=\"#packaging-your-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Il <em>packaging</em> Python si riferisce al preparare la tua app in un formato specifico che può essere facilmente installato e riutilizzato. Django stesso è «impacchettato» così. Per piccole app come polls, è un processo non molto difficile.</p>\n<ol class=\"arabic\">\n<li><p>Primo, crea una directory principale per <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>, all’esterno del tuo progetto Django. Nomina questa cartella <code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls</span></code>.</p>\n<aside class=\"admonition-choosing-a-name-for-your-app admonition\">\n<p class=\"admonition-title\">Scegli un nome per la tua app</p>\n<p>Quando scegli un nome per il tuo package controlla le risorse come PyPI per evitare di generare conflitti con i nomi di packages esistenti. E” convenzione anteporre «django-» al nome del tuo modulo quando si crea un package da distribuire.\nQuesto aiuta le persone alla ricerca di applicazioni per Django a identificare la tua come specifica per Django.</p>\n<p>L” etichetta dell” applicazione (cioè, la parte finale del percorso puntato al package dell’applicazione) <em>deve</em> essere unica in <a class=\"reference internal\" href=\"/it/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>. Evita di usare le stesse etichette di uno degli Django <a class=\"reference internal\" href=\"/it/4.2/ref/contrib/\"><span class=\"doc\">contrib packages</span></a>, per esempio <code class=\"docutils literal notranslate\"><span class=\"pre\">auth</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">admin</span></code>, o <code class=\"docutils literal notranslate\"><span class=\"pre\">messages</span></code>.</p>\n</aside>\n</li>\n<li><p>Sposta la cartella <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> nella cartella <code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls</span></code>.</p></li>\n<li><p>Crea un file <code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls/README.rst</span></code> con il seguente contenuto:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"rst\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls/README.rst</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Rst</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Rst code\"><code><span class=\"gh\">=====</span>\n<span class=\"gh\">Polls</span>\n<span class=\"gh\">=====</span>\n\nPolls is a Django app to conduct web-based polls. For each question,\nvisitors can choose between a fixed number of answers.\n\nDetailed documentation is in the &quot;docs&quot; directory.\n\n<span class=\"gh\">Quick start</span>\n<span class=\"gh\">-----------</span>\n\n<span class=\"m\">1.</span> Add &quot;polls&quot; to your INSTALLED_APPS setting like this::\n\n    INSTALLED_APPS = [\n<span class=\"c\">        ...,</span>\n<span class=\"c\">        &quot;polls&quot;,</span>\n<span class=\"c\">    ]</span>\n\n<span class=\"m\">2.</span> Include the polls URLconf in your project urls.py like this::\n\n    path(&quot;polls/&quot;, include(&quot;polls.urls&quot;)),\n\n<span class=\"m\">3.</span> Run <span class=\"s\">``python manage.py migrate``</span> to create the polls models.\n\n<span class=\"m\">4.</span> Start the development server and visit http://127.0.0.1:8000/admin/\n   to create a poll (you&#39;ll need the Admin app enabled).\n\n<span class=\"m\">5.</span> Visit http://127.0.0.1:8000/polls/ to participate in the poll.\n</code></pre></figure>\n</li>\n<li><p>Crea un file <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>django-polls/LICENSE`. Scegliere una licenza è oltre lo scopo di questo tutorial, ma è sufficiente dire che il codice rilasciato pubblicamente senza licenza è <em>inutile</em>. Django e molte app Django-compatibili sono distribuite sotto la licenza BSD; comunque, sei libero di scegliere la licenza che preferisci. Sii solo consapevole che la licenza che scegli influenzerà anche quelli che usano il tuo codice.</p></li>\n<li><p>Next we’ll create the <code class=\"docutils literal notranslate\"><span class=\"pre\">pyproject.toml</span></code> file which details how to build and\ninstall the app. A full explanation of this file is beyond the scope of this\ntutorial, but the <a class=\"reference external\" href=\"https://packaging.python.org/guides/writing-pyproject-toml/\">Python Packaging User Guide</a> has a good\nexplanation. Create the <code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls/pyproject.toml</span></code> file with the\nfollowing contents:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"toml\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls/pyproject.toml</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Toml</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Toml code\"><code><span class=\"k\">[build-system]</span>\n<span class=\"n\">requires</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">&quot;setuptools&gt;=69.3&quot;</span><span class=\"p\">]</span>\n<span class=\"n\">build-backend</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s2\">&quot;setuptools.build_meta&quot;</span>\n\n<span class=\"k\">[project]</span>\n<span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s2\">&quot;django-polls&quot;</span>\n<span class=\"n\">version</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s2\">&quot;0.1&quot;</span>\n<span class=\"n\">dependencies</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">[</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;django&gt;=X.Y&quot;</span><span class=\"p\">,</span><span class=\"w\">  </span><span class=\"c1\"># Replace &quot;X.Y&quot; as appropriate</span>\n<span class=\"p\">]</span>\n<span class=\"n\">description</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s2\">&quot;A Django app to conduct web-based polls.&quot;</span>\n<span class=\"n\">readme</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s2\">&quot;README.rst&quot;</span>\n<span class=\"n\">requires-python</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s2\">&quot;&gt;= 3.8&quot;</span>\n<span class=\"n\">authors</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">[</span>\n<span class=\"w\">    </span><span class=\"p\">{</span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"p\">=</span><span class=\"w\"> </span><span class=\"s2\">&quot;Your Name&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">email</span><span class=\"w\"> </span><span class=\"p\">=</span><span class=\"w\"> </span><span class=\"s2\">&quot;yourname@example.com&quot;</span><span class=\"p\">},</span>\n<span class=\"p\">]</span>\n<span class=\"n\">classifiers</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">[</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Environment :: Web Environment&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Framework :: Django&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Framework :: Django :: X.Y&quot;</span><span class=\"p\">,</span><span class=\"w\">  </span><span class=\"c1\"># Replace &quot;X.Y&quot; as appropriate</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Intended Audience :: Developers&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;License :: OSI Approved :: BSD License&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Operating System :: OS Independent&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Programming Language :: Python&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Programming Language :: Python :: 3&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Programming Language :: Python :: 3 :: Only&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Programming Language :: Python :: 3.8&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Programming Language :: Python :: 3.9&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Programming Language :: Python :: 3.10&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Programming Language :: Python :: 3.11&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Programming Language :: Python :: 3.12&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Topic :: Internet :: WWW/HTTP&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;Topic :: Internet :: WWW/HTTP :: Dynamic Content&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n\n<span class=\"k\">[project.urls]</span>\n<span class=\"n\">Homepage</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s2\">&quot;https://www.example.com/&quot;</span>\n</code></pre></figure>\n</li>\n<li><p>Many common files and Python modules and packages are included in the\npackage by default. To include additional files, we’ll need to create a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">MANIFEST.in</span></code> file. To include the templates and static files, create a\nfile <code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls/MANIFEST.in</span></code> with the following contents:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"text\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls/MANIFEST.in</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>recursive-include polls/static *\nrecursive-include polls/templates *\n</code></pre></figure>\n</li>\n<li><p>It’s optional, but recommended, to include detailed documentation with your\napp. Create an empty directory <code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls/docs</span></code> for future\ndocumentation.</p>\n<p>Nota che la directory <code class=\"docutils literal notranslate\"><span class=\"pre\">docs</span></code> non verrà inclusa nel tuo package finchè non ci aggiungi dei file. Molte Django app offrono la loro documentazione online anche attraverso siti come <a class=\"reference external\" href=\"https://readthedocs.org\">readthedocs.org</a>.</p>\n</li>\n<li><p>Check that the <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/build/\">build</a> package is installed (<code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">-m</span> <span class=\"pre\">pip</span> <span class=\"pre\">install</span>\n<span class=\"pre\">build</span></code>) and try building your package by running <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">-m</span> <span class=\"pre\">build</span></code> inside\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls</span></code>. This creates a directory called <code class=\"docutils literal notranslate\"><span class=\"pre\">dist</span></code> and builds your\nnew package into source and binary formats, <code class=\"docutils literal notranslate\"><span class=\"pre\">django_polls-0.1.tar.gz</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django_polls-0.1-py3-none-any.whl</span></code>.</p></li>\n</ol>\n<p>Per ulteriori informazioni sul packaging, vedi il tutorial di Python <a class=\"reference external\" href=\"https://packaging.python.org/tutorials/packaging-projects/\">Tutorial sul Packaging e la Distribuzione di Progetti</a>.</p>\n</section>\n<section id=\"using-your-own-package\">\n<h2>Utilizzare il tuo pacchetto<a class=\"heading-anchor\" href=\"#using-your-own-package\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Dato che abbiamo spostato la cartella  <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>  fuori dal nostro progetto, non funziona più. Possiamo sistemare questo problema, installando il nuovo nostro package <code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls</span></code>.</p>\n<aside class=\"admonition-installing-as-a-user-library admonition\">\n<p class=\"admonition-title\">Installando una libreria utente</p>\n<p>I seguenti step installano <code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls</span></code> come libreria utente. Le installazioni «per utente» hanno molti vantaggi rispetto a quelle di sistema, come per esempio il fatto di poter essere utilizzate su sistemi dove non si ha accesso di amministrazione così come il fatto che l’utilizzo del package non ha effetto sui servizi del sistema o sugli altri utenti della macchina.</p>\n<p>Nota che le installazioni «per utente» possono ancora avere effetto sul comportamento di quei tool di sistema che sono lanciati da quell’utente, quindi utilizzare un virtual environment è una soluzione più robusta (vedi sotto).</p>\n</aside>\n<ol class=\"arabic\">\n<li><p>To install the package, use pip (you already <a class=\"reference internal\" href=\"#installing-reusable-apps-prerequisites\"><span class=\"std std-ref\">installed it</span></a>, right?):</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>--user<span class=\"w\"> </span>django-polls/dist/django_polls-0.1.tar.gz\n</code></pre></div>\n</li>\n<li><p>Con un pizzico di fortuna, il tuo progetto Django ora dovrebbe nuovamente funzionare correttamente. Esegui il server di nuovo per confermare.</p></li>\n<li><p>To uninstall the package, use pip:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>uninstall<span class=\"w\"> </span>django-polls\n</code></pre></div>\n</li>\n</ol>\n</section>\n<section id=\"publishing-your-app\">\n<h2>Pubblicare la tua applicazione<a class=\"heading-anchor\" href=\"#publishing-your-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ora che abbiamo creato e testato il package <code class=\"docutils literal notranslate\"><span class=\"pre\">django-polls</span></code>, è pronto per essere condiviso con il mondo! Se questo non era solo un esempio, potresti fare ora:</p>\n<ul class=\"simple\">\n<li><p>Manda via mail il package ad un amico.</p></li>\n<li><p>Uploada il pacchetto sul tuo sito web</p></li>\n<li><p>Metti il package su un repository pubblico come il <a class=\"reference internal\" href=\"#the-python-package-index-pypi\">Python Package Index (PyPI)</a>. packaging.python.org &lt;<a class=\"reference external\" href=\"https://packaging.python.org\">https://packaging.python.org</a>&gt;`_ offre un bel tutorial &lt;<a class=\"reference external\" href=\"https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives\">https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives</a>&gt;`_ per farlo.</p></li>\n</ul>\n</section>\n<section id=\"installing-python-packages-with-a-virtual-environment\">\n<h2>Installazione di pacchetti Python con un ambiente virtuale<a class=\"heading-anchor\" href=\"#installing-python-packages-with-a-virtual-environment\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Prima, abbiamo installato la app polls come una libreria utente. Questo però ha dei svantaggi:</p>\n<ul class=\"simple\">\n<li><p>Modificare le librerie delle utenze può danneggiare altri software Python installati nel tuo sistema.</p></li>\n<li><p>Non sarai in grado di eseguire multiple versioni di questo pacchetto ( o altri con lo stesso nome ).</p></li>\n</ul>\n<p>Tipicamente, queste situazioni accadono quando manutieni svariati progetti Django. In questo caso, la miglior soluzione è usare <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/venv.html\" title=\"(in Python v3.14)\"><span class=\"xref std std-doc\">venv</span></a>. Questo tool ti permette di mantenere più ambienti Python isolati, ognuno con la propria copia delle librerie ed un namespace proprio.</p>\n</section>","rootId":"advanced-tutorial-how-to-write-reusable-apps","toc":[{"title":"La riusabilità è importante","anchor":"reusability-matters","children":[]},{"title":"Il tuo progetto e la tua applicazione riutilizzabile","anchor":"your-project-and-your-reusable-app","children":[]},{"title":"Installazione di alcuni prerequisiti","anchor":"installing-some-prerequisites","children":[]},{"title":"Pacchettizzare la tua applicazione","anchor":"packaging-your-app","children":[]},{"title":"Utilizzare il tuo pacchetto","anchor":"using-your-own-package","children":[]},{"title":"Pubblicare la tua applicazione","anchor":"publishing-your-app","children":[]},{"title":"Installazione di pacchetti Python con un ambiente virtuale","anchor":"installing-python-packages-with-a-virtual-environment","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Come iniziare","url":"/it/4.2/intro/"}],"prev":{"docname":"intro/tutorial08","title":"Writing your first Django app, part 8","url":"/it/4.2/intro/tutorial08/"},"next":{"docname":"intro/whatsnext","title":"Cosa leggere dopo","url":"/it/4.2/intro/whatsnext/"},"formats":{"html":"/it/4.2/intro/reusable-apps/","markdown":"/it/4.2/intro/reusable-apps.md","json":"/it/4.2/intro/reusable-apps.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/intro/reusable-apps.txt","official":"https://docs.djangoproject.com/it/4.2/intro/reusable-apps/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}