tag:blogger.com,1999:blog-14358127050361905672024-02-07T04:51:23.280+01:00Distillato di PythonDa assaporare a piccoli sorsiAnonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.comBlogger30125tag:blogger.com,1999:blog-1435812705036190567.post-89364478280665372892016-05-29T20:11:00.000+02:002016-05-29T20:11:26.557+02:00Python: inviare una email usando un server SMTPUna raccolta di piccoli esempi di codice per inviare email usando Python e SMTP. Il server smtp può essere quello del vostro fornitore di posta elettronica, ad esempio Libero.
<br />
<br />
<br />
<div>
Inviare email con Python 3.3 o superiori, server SMTP e autenticazione TLS<br />
<br />
<script src="https://gist.github.com/giornaledisistema/76045364c085560aaa244e0273686927.js"></script>
</div>
<br />
<br />
<div>
Inviare email con Python 3.2 o inferiori, server SMTP e autenticazione TLS<br />
<br />
<script src="https://gist.github.com/giornaledisistema/4b0aaeb187b1c9c5da8ac6ec5dbc4dd0.js"></script>
</div>
<br />Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com1tag:blogger.com,1999:blog-1435812705036190567.post-47268864121057134902015-03-19T10:43:00.000+01:002015-03-19T10:43:01.316+01:00Pensare in Python - Come pensare da Informatico, la nuova versione italianaUna bella notizia per gli amici pythonisti o aspiranti tali:
grazie al lavoro di <b>Andrea Zanella</b>, è disponibile la versione italiana aggiornata del classico "<a href="https://github.com/AllenDowney/ThinkPythonItalian">Pensare in Python - Come pensare da Informatico</a>" di Allen B. Downey.<br />
<br />
Come sempre lo trovate anche nella lista delle <a href="http://distillatodipython.blogspot.it/p/risorse-python.html">Risorse Python</a> insieme ai <a href="http://distillatodipython.blogspot.it/p/risorse-python.html#libri-italiano-da-zero">codici di esempio e soluzione degli esercizi</a>, quest'ultimi in inglese.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-3540345461178015282014-08-23T17:21:00.000+02:002014-08-23T17:24:13.312+02:00Risorse Python: aggiornamento 9 - Editor e IDE per sviluppare in PythonPrima o poi il codice Python con qualcosa bisognerà pure scriverlo. Massiccio aggiornamento della sezione risorse Python con l'aggiunta di due intere sottosezioni dedicate all'argomento:<br />
<ul>
<li><a href="http://distillatodipython.blogspot.it/p/risorse-python.html#editor">Editor per Pyhon</a></li>
<li><a href="http://distillatodipython.blogspot.it/p/risorse-python.html#ide">IDE per Pyhon</a></li>
</ul>
Aggiunto anche un <a href="http://distillatodipython.blogspot.it/p/risorse-python.html#libri-tutorial-interattivi">tutorial interattivo di Codecademy</a> per Python 2.x.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-19276611707424517232014-08-03T11:19:00.000+02:002014-08-19T10:17:44.946+02:00Come e perché usare il versioning semanticoAvete presente tutti quei numeri che indicano la versione di un certo software? Parlo di quei numeri del tipo <span style="font-family: "Courier New",Courier,monospace;">x.y.z</span>. Per esempio Python al momento in cui scrivo esiste nella versione 2.7.8 e 3.4.1.<br />
<br />
Vi siete mai chiesti cosa rappresentano e come vengono decisi quei numeri?<br />
<br />
Si tratta del cosiddetto <a href="http://semver.org/lang/it/" rel="nofollow">versionamento semantico</a> o <a href="http://semver.org/" rel="nofollow">semantic versioning</a>. In poche parole:<br />
<ul>
<li><span style="font-family: "Courier New",Courier,monospace;">X</span> rappresenta la "<i>major</i>" release di un software, ossia una release la cui API (<a href="http://it.wikipedia.org/wiki/Application_programming_interface" rel="nofollow" target="_blank">Application Programming Interface</a>) non è retrocompatibile con la precedente release. Python 3.x ha un'API non retrocompatibile con quella di Python 2.x, per esempio lo statement <span style="font-family: "Courier New",Courier,monospace;">print</span> è diventata la funzione <span style="font-family: "Courier New",Courier,monospace;">print()</span>;</li>
<li><span style="font-family: "Courier New",Courier,monospace;">Y</span> rappresenta la "<i>minor</i>" release di un software, ossia una release in cui anche se vengono aggiunte nuove funzionalità, l'API resta retrocompatibile con la versione precedente del software.<br />Python 2.7 ha aggiunto/modificato delle funzionalità, ma queste sono retrocompatibili con la precedente versione Python 2.6, perciò il software che avete scritto per la 2.6 continuerà a girare anche con Python 2.7;</li>
<li><span style="font-family: "Courier New",Courier,monospace;">Z</span> rappresenta laa "<i>patch</i>"
release di un software, ossia una release in cui vengono solo corretti dei bug e l'API resta comunque retrocompatibile con la versione
precedente del software.<br />Python 2.7.8 è una versione che corregge dei bug rispetto alla precedente 2.7.7 e resta retrocompatibile con essa.</li>
</ul>
Perché usare il semantic versioning? Per evitare (o almeno provare ad evitarlo) il "dependency hell", l'inferno delle dipendenze.<br />
<br />
Immaginate di avere un vostro software che usa la versione <span style="font-family: "Courier New",Courier,monospace;">X.Y.Z</span> , per esempio la 2.1.0 di un certo modulo/liberia sviluppata da qualcun altro: se il suo sviluppatore segue il versioning semantico, potrete avere una ragionevole sicurezza che non ci saranno modifiche non retrocompatibili finché userete il ramo <span style="font-family: "Courier New",Courier,monospace;">2.X</span> di quel modulo.<br />
<br />
Allo stesso modo, quando sviluppate voi un software, potete comunicare in modo semplice ed efficace che tipo di modifiche avete fatto:<br />
<ul>
<li>se è un semplice bugfix modificherete il numero <span style="font-family: "Courier New",Courier,monospace;">Z</span> di patch release, ad esempio da 2.1.0 a 2.1.1;</li>
<li>se avete aggiunto nuove funzionalità senza però rompere la retrocompatibilità, modificherete solo il numero <span style="font-family: "Courier New",Courier,monospace;">Y</span> di minor release, ad esempio da 2.1.1 a 2.2.0;</li>
<li>se la vostra nuova versione del software ha un'API non più compatibile con quella delle versioni precedenti, modificherete il numero <span style="font-family: "Courier New",Courier,monospace;">X</span> di major release, ad esempio da 2.1.1 a 3.0.0.</li>
</ul>
Se ancora non state usando queste convenzioni nello sviluppo del vostro software e vi siete incuriositi almeno un po' alla questione, allora leggete il resto della storia sul <a href="http://semver.org/lang/it/" rel="nofollow">versionamento semantico</a>.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-26550743254367062752014-05-13T06:56:00.002+02:002014-08-19T10:19:45.954+02:00Disinstallare Python da pyenvNella serie di post precedenti avete imparato a configurare la/le versioni di Python da usare con pyenv al livello di granularità richiesto:<br />
<br />
<ul>
<li><a href="http://distillatodipython.blogspot.com/2013/12/configurazione-di-python-con-pyenv-livello-globale.html">livello globale</a>;</li>
<li><a href="http://distillatodipython.blogspot.com/2013/12/configurazione-python-con-pyenv-livello-locale.html">livello locale</a>;</li>
<li><a href="http://distillatodipython.blogspot.com/2013/12/configurazione-python-con-pyenv-livello-shell.html">livello shell</a>.</li>
</ul>
<br />
Vediamo adesso come disinstallare le versioni di Python che non ci interessano più. Usate<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">pyenv uninstall 2.7.6</span><br />
<br />
per eliminare solo la versione indicata. Ripetete il comando per ogni versione installata che volete disinstallare. Potrebbe capitare che non vi ricordiate quali versioni di Python avete installato sulla vostra macchina. Chiedetelo a pyenv:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">pyenv versions</span><br />
<br />
Se volete, la dinstallazione potete farla anche manualmente. Si tratta di una semplice cancellazione della directory che contiene la versione che vogliamo disinstallare tramite il comando:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">rm -rf nome_directory</span><br />
<br />
Per esempio, supponiamo di voler eliminare Python 2.7.6 precedentemente installato. Dov'è la directory che la contiene? Chiediamolo a pyenv:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv prefix 2.7.6</span><br />
<br />
La risposta è:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">~/.pyenv/versions/2.7.6</span><br />
<div>
<br /></div>
Eccola lì, basta cancellare questa directory ed il gioco è fatto:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">rm -rf ~/.pyenv/versions/2.7.6</span><br />
<br />
Allo stesso modo si procede per qualunque altra versione di Python, basta ricordare che in generale ogni versioni di Python è installate nella directory:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">~/.pyenv/versions/numero_versione</span><br />
<br />
E se non ve lo ricordate non è un problema, usate <span style="font-family: 'Courier New', Courier, monospace;">pyenv prefix</span> e avrete il percorso completo della directory da cancellare.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-55681556919637823082013-12-30T08:46:00.000+01:002013-12-30T08:46:37.070+01:00Risorse Python: aggiornamento 8 - differenze Python 2.x/3.xNell'ottavo aggiornamento della pagina <a href="http://distillatodipython.blogspot.it/p/risorse-python.html">Risorse Python</a> del blog ho inserito link a materiale sulle <a href="http://distillatodipython.blogspot.it/p/risorse-python.html#differenze-python2x-3x">differenze tra Python 2.x e 3.x</a>, uno dei problemi che lo sviluppatore Python prima o poi si trova ad affrontare nell'attuale fase di transizione fra le due versioni.<br />
<br />
Aggiornamenti anche per la sezione <a href="http://distillatodipython.blogspot.it/p/risorse-python.html#esempi-codice">Esempi di codice</a> con un po' di snippet di pronto intervento quando non ricordate qualche aspetto base del linguaggio.<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-4458622323269164632013-12-28T09:30:00.000+01:002013-12-29T15:54:42.019+01:00Risorse Python: aggiornamento 7 - tutorial PyMOTW anche in italianoSettimo aggiornamento per la pagina <a href="http://distillatodipython.blogspot.it/p/risorse-python.html">Risorse Python</a> del blog con l'inserimento di <a href="http://pymotw.com/2/" rel="nofollow" target="_blank">Python Module of the Week</a>, noto anche come PyMOTW, un tour guidato sulla Python Standard Library creato da Doug Hellmann.<br />
<br />
Ricco di spiegazioni semplici e dettagliate, accompagnate da abbondanti esempi di codice, lo mettono alla portata anche di chi conosce solo le basi di Python e vuole passare al gradino successivo del suo apprendimento. E se l'inglese non è il vostro forte, c'è una <a href="http://robyp.x10host.com/index.html" rel="nofollow" target="_blank">versione italiana di PyMOTW</a>.<br />
<br />
Viste le caratteristiche, aggiunto sia nella sezione <a href="http://distillatodipython.blogspot.it/p/risorse-python.html#libri-inglese-da-altri-linguaggi">Libri inglese - da altri linguaggi</a> che nella sezione <a href="http://distillatodipython.blogspot.it/p/risorse-python.html#tutorial">Tutorial</a>.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-7721144360841816892013-12-20T10:31:00.003+01:002014-08-19T10:19:45.980+02:00Idiomatic Python: come scrivere codice alla maniera di PythonCome scrivere codice pythonico,<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="344" src="//www.youtube.com/embed/OSGv2VnC0go" width="459"></iframe>
<br />
<br />
con relative slide.
<br />
<br />
<script async="" class="speakerdeck-embed" data-id="c56b00e084950130ac8e22000a1c4bc5" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
<br />
Buona visione.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-80197943712495755342013-12-17T09:30:00.000+01:002014-08-19T10:19:45.983+02:00Come aggiornare PyenvDopo aver <a href="http://distillatodipython.blogspot.it/2013/12/configurazione-python-con-pyenv-livello-shell.html">configurato Python a livello locale</a>, non vi resta che tenere aggiornata l'installazione di pyenv. Il suo aggiornamento si rende necessario quando:<br />
<ul>
<li>sono stati corretti dei bug;</li>
<li>è disponibile una nuova versione di Python.</li>
</ul>
In questo secondo caso ve ne potete rendere conto dal fatto che chiedendo la <a href="http://distillatodipython.blogspot.com/2013/12/installazione-di-python-con-pyenv.html#lista-versioni-python-disponibili">lista delle versioni Python</a> disponibili per l'installazione, la nuova versione non risulta nell'elenco.<br />
<br />
Per procedere con l'aggiornamento di pyenv, aprite un terminale e date i comandi:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">cd ~/.pyenv<br />git pull</span><br />
<br />
Tutto qui, avete finito.<br />
<br />
Tenete solo presente una cosa: se la nuova versione continua a <u>non</u> apparire anche dopo l'aggiornamento, significa che lo sviluppatore di pyenv può non aver ancora fatto in tempo ad aggiornare il <a href="https://github.com/yyuu/pyenv" rel="nofollow" target="_blank">repository dell'applicazione</a>. Riprovate successivamente.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-75078338899934524292013-12-16T09:18:00.000+01:002013-12-16T09:18:19.191+01:00Risorse Python: aggiornamento 6 - TkinterSesto aggiornamento per la pagina <a href="http://distillatodipython.blogspot.it/p/risorse-python.html">Risorse Python</a> del blog interamente dedicato a <b>Tkinter</b>, l'interfaccia Python standard a Tk, il toolkit per interfacce utente grafiche (GUI).<br />
<br />
Guide, tutorial e reference per Tkinter di cui oltre la metà sono in italiano, le prime nella lista, e tutte comunque liberamente scaricabili/consultabili in rete.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-27631644887171308582013-12-13T09:30:00.000+01:002014-08-19T10:19:45.957+02:00Configurazione di Python tramite pyenv a livello di shellNel post precedente ci siamo occupati della <a href="http://distillatodipython.blogspot.com/2013/12/configurazione-python-con-pyenv-livello-locale.html">configurazione di Python con pyenv a livello locale</a>, cioè della versione di Python da avviare al livello di una specifica directory.<br />
<br />
In questo post invece ci occupiamo dell'ultima e più specifica di tutte le impostazioni che pyenv vi permette, quella a livello di shell (terminale): grazie ad essa potete specificare quale <b>versione di Python</b> usare a <b>livello di ogni singolo terminale</b> che aprite sul vostro sistema.<br />
<br />
Lo fate tramite il comando<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv shell 3.3.3</span><br />
<br />
che ad esempio imposta l'uso di Python 3.3.3 per la sola shell corrente, sovrascrivendo quindi sia le impostazioni a livello globale, sia a livello locale eventualmente già configurate.<br />
<br />
Come sempre si possono impostare più versioni di Python contemporaneamente con<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv shell 2.7.6 3.3.3</span><br />
<br />
mentre<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv shell</span><br />
<br />
senza ulteriori indicazioni restituisce le versioni di Python attive nella shell corrente:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">2.7.6:3.3.3</span><br />
<br />
Non si tratta di un errore, le versioni attive in questo caso sono visualizzati in questo modo un po' diverso dal solito.<br />
<br />
Le impostazioni valgono per quella shell finché resta aperta. Una volta chiusa tutte le impostazioni andranno perse e resteranno attive solo quelle globali e locali perché queste sono registrate su file, rispettivamente nel file <span style="font-family: Courier New, Courier, monospace;">~/.pyenv/version</span> per quella globale, e nel file <span style="font-family: Courier New, Courier, monospace;">.pyenv-version</span> della directory corrente per quella locale.<br />
<br />
Se volete annullare le impostazioni fatte finora senza chiudere la shell usate<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv shell --unset</span><br />
<br />
e riprenderanno a funzionare le impostazioni locali se precedentemente configurate, altrimenti quella globale.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-31518575533843787322013-12-12T09:10:00.000+01:002014-08-19T10:19:45.960+02:00Configurazione di Python tramite pyenv: livello localeIn questo post continuiamo la chiacchierata iniziata in <a href="http://distillatodipython.blogspot.it/2013/12/configurazione-di-python-con-pyenv-livello-globale.html">quello precedente</a> parlando della configurazione di Python tramite pyenv a livello locale.<br />
<br />
Immaginate un vostro progetto che ha bisogno di usare una specifica versione di Python differente da quella globale: potete impostare questa versione perché si avvii solo nella directory che ospita il vostro progetto, in tutte le altre continueranno ad avviarsi le solite versioni.<br />
<br />
Questo vuol dire che le impostazioni locali prevalgono su quelle globali, tenetelo sempre a mente.<br />
<br />
Per <b>impostare Python a livello locale</b> si usa il comando<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv local 2.7.6</span><br />
<br />
che ad esempio imposta Python 2.7.6 per la directory corrente.<br />
<br />
Il comando fa anche altro: crea se non esiste, altrimenti lo aggiorna, il file <span style="font-family: Courier New, Courier, monospace;">.pyenv-version</span> e dentro vi scrive una stringa uguale alla versione di Python da avviare in quella directory, in questo caso sarà "<i>2.7.6</i>".<br />
<br />
Ogni volta che avvierete Python, pyenv controllerà prima la presenza di questo file nella directory corrente, se lo trova avvierà la versione corrispondente a quella stringa. Se non trova il file si rifà invece alle impostazioni globali.<br />
<br />
Esattamente come a livello globale si possono <b>impostare più versioni di Python</b> anche <b>a livello locale</b>:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv local 2.6.9 2.7.6</span><br />
<br />
Invece il comando<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv local</span><br />
<br />
senza ulteriori parametri, restituisce la/le versioni correntemente attive di Python per la directory corrente:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">2.6.9 </span><br />
<span style="font-family: Courier New, Courier, monospace;">2.7.6</span><br />
<br />
Se volete <b>eliminare la configurazione locale</b> di una directory, aprite il terminale in quella directory e date il comando:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv local --unset</span><br />
<br />
E anche per il livello locale è tutto. Nel <a href="http://distillatodipython.blogspot.com/2013/12/configurazione-python-con-pyenv-livello-shell.html">prossimo post</a> si parlerà invece dell'ultimo livello di controllo, quello più fine che pyenv permette: stabilire quale/quali versioni di Python avviare a livello di singola shell.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-4999444414746162672013-12-09T07:41:00.000+01:002013-12-14T12:48:13.887+01:00Risorse Python: aggiornamento 5 - GitQuinto aggiornamento per la pagina "<a href="http://distillatodipython.blogspot.it/p/risorse-python.html">Risorse Python</a>" del blog con l'aggiunta, nella sezione <a href="http://distillatodipython.blogspot.it/p/risorse-python.html#version-management">Version Management</a>, di <b>Git</b>, il sistema di versioning distribuito creato da Linus Torvalds, il padre di Linux.<br />
<br />
Per coloro che hanno bisogno di documentazione sul come usarlo, ho aggiunto i link ad un paio di guide davvero carine e tradotte anche in italiano, più altre in inglese ed un paio di Cheat Sheet molto comodi per la consultazione veloce quando non ricordiamo un comando o la sequenza di comandi da usare nel nostro flusso di lavoro.<br />
<br />
Per chi invece cerca qualcosa di più corposo c'è il libro "Pro Git" di Scott Chacon, ed il link alla guida che ho scritto sul forum di Python per averne una versione ePub o Mobi (per Kindle Fire) anche in italiano.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-75601530836172188352013-12-05T09:10:00.000+01:002014-08-19T10:19:45.977+02:00Configurazione di Python tramite pyenv: livello globaleNel post sull'<a href="http://distillatodipython.blogspot.com/2013/12/installazione-di-python-con-pyenv.html">installazione di Python con Pyenv</a> avete installato quattro diverse versioni di Python. La sola installazione non è però sufficiente per poterle usare con i vostri programmi, dovete prima configurarle: vediamo come.<br />
<br />
Pyenv è così elastico nelle configurazioni da poter scegliere quante e quali versione di Python usare, e sopratutto, a quale livello:<br />
<ul>
<li>livello globale, cioè in tutte le shell (terminali);</li>
<li>livello locale, cioè quando il terminale si trova in una specifica directory. Sovrascrive la scelta globale;</li>
<li>livello di singola shell. Vale solo nella shell corrente, quella che state usando, e sovrascrive tutte le scelte precedenti.</li>
</ul>
In questo post ci occuperemo di <b>configurare Python a livello globale</b>, per gli altri livelli ci saranno post dedicati.<br />
<br />
Per la configurazione a livello globale si usa il comando<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv global 2.7.6</span><br />
<br />
che ad esempio imposta a livello globale l'uso di Python 2.7.6.<br />
<br />
Il comando crea inoltre, se non esiste già, il file <span style="font-family: Courier New, Courier, monospace;">~/.pyenv/version</span>. Al suo interno pyenv vi scrive il numero di versione di Python che volete usare a livello globale.<br />
<br />
Quello che fa è semplicemente aggiungere nel file una stringa, in questo caso "<i>2.7.6</i>", in modo che quando invocherete nuovamente Python in un terminale qualunque (da cui appunto globale), pyenv sa già quale versione avete impostato.<br />
<br />
Per <b>configurare più versioni di Python contemporaneamente</b>, usate il comando <span style="font-family: Courier New, Courier, monospace;">pyenv global</span> in questo modo:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv global 2.6.9 2.7.6 3.2.5 3.3.3</span><br />
<br />
Ecco, avete appena configurato il vostro sistema affinché a livello globale usi tutte le versioni di Python che avevate installato in pyenv seguendo le <a href="http://distillatodipython.blogspot.it/2013/12/installazione-di-python-con-pyenv.html">istruzioni del post precedente</a>.<br />
<br />
Se al comando <span style="font-family: Courier New, Courier, monospace;">pyenv global</span> non fate seguire nulla, esso restituisce le versioni globali correntemente configurate:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv global</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">2.6.9</span><br />
<span style="font-family: Courier New, Courier, monospace;">2.7.6</span><br />
<span style="font-family: Courier New, Courier, monospace;">3.2.5</span><br />
<span style="font-family: Courier New, Courier, monospace;">3.3.3</span><br />
<br />
Eccole lì, tutte le versioni installate sono presenti e pronte all'uso. Bene, facciamo qualche prova.<br />
<br />
Avviate la versione 2.6 di Python:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">python2.6</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Python 2.6.9 (unknown, Nov 22 2013, 22:52:18) </span><br />
<span style="font-family: Courier New, Courier, monospace;">[GCC 4.6.3] on linux3</span><br />
<span style="font-family: Courier New, Courier, monospace;">Type "help", "copyright", "credits" or "license" for more information.</span><br />
<br />
Provate ora ad avviare la versione 2.7:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">python2.7</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">Python 2.7.6 (default, Nov 26 2013, 10:15:44) </span><br />
<span style="font-family: Courier New, Courier, monospace;">[GCC 4.6.3] on linux2</span><br />
<span style="font-family: Courier New, Courier, monospace;">Type "help", "copyright", "credits" or "license" for more information.</span><br />
<br />
La 3.2:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">python3.2</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Python 3.2.5 (default, Dec 3 2013, 08:43:37) </span><br />
<span style="font-family: Courier New, Courier, monospace;">[GCC 4.6.3] on linux2</span><br />
<span style="font-family: Courier New, Courier, monospace;">Type "help", "copyright", "credits" or "license" for more information.</span><br />
<div>
<br /></div>
<div>
La 3.3:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">python3.3</span></div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Python 3.3.3 (default, Nov 22 2013, 09:28:26) </span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">[GCC 4.6.3] on linux</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Type "help", "copyright", "credits" or "license" for more information.</span></div>
</div>
<div>
<br /></div>
<div>
Tutte rispondono all'appello.<br />
<br />
Ma se avviate la generica versione 2 di Python, quale parte? La 2.6 o la 2.7? Controlliamo:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">python2</span></div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Python 2.7.6 (default, Nov 26 2013, 10:15:44) </span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">[GCC 4.6.3] on linux2</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Type "help", "copyright", "credits" or "license" for more information.</span></div>
</div>
<div>
<br /></div>
<div>
Parte quella più recente. E avviando la generica versione 3 quale parte? La 3.2.5 o la 3.3.3? Vediamo:</div>
<br />
<span style="font-family: Courier New, Courier, monospace;">python3</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Python 3.2.5 (default, Dec 3 2013, 08:43:37) </span><br />
<span style="font-family: Courier New, Courier, monospace;">[GCC 4.6.3] on linux2</span><br />
<span style="font-family: Courier New, Courier, monospace;">Type "help", "copyright", "credits" or "license" for more information.</span><br />
<div>
<br /></div>
Questa volta parte la versione meno recente, la 3.2.5.<br />
<br />
Ricapitolando: se viene chiamata la generica versione 2 di Python parte quella più recente, se invece viene chiamata la generica versione 3, parte la versione meno recente. Per non confondervi con questo comportamento di pyenv indicate sempre <u>esplicitamente</u> la versione di Python che volete avviare, per esempio:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">python3.3</span><br />
<br />
Per tornare ad <b>usare la versione di default di Python</b>, quella predefinita della vostra distribuzione che stavate usando prima di pyenv, basta dare il comando:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv global system</span><br />
<br />
"system" è un nome speciale che dice a pyenv di riprendere ad usare le versioni di default sul sistema, ed infatti se ora chiedete cosa è configurato a livello globale,<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">pyenv global</span><br />
<br />
otterrete:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">system</span><br />
<br />
Riprovando ad avviare Python notate adesso i numeri di versione:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">python2</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Python 2.7.3 (default, Sep 26 2013, 20:03:06)</span><br />
<span style="font-family: Courier New, Courier, monospace;">[GCC 4.6.3] on linux2</span><br />
<span style="font-family: Courier New, Courier, monospace;">Type "help", "copyright", "credits" or "license" for more information.</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">python3</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Python 3.2.3 (default, Sep 25 2013, 18:22:43)</span><br />
<span style="font-family: Courier New, Courier, monospace;">[GCC 4.6.3] on linux2</span><br />
<span style="font-family: Courier New, Courier, monospace;">Type "help", "copyright", "credits" or "license" for more information.</span><br />
<br />
Sono cambiati, sono nuovamente Python 2.7.3 e 3.2.3, i default di Ubuntu 12.04 LTS, sul vostro sistema naturalmente ricomparirà la vostra versione precedentemente installata.<br />
<br />
Anche per questa volta è tutto, ma le magie di pyenv non sono finite. Continueranno nel prossimo post dove ci occuperemo di <a href="http://distillatodipython.blogspot.com/2013/12/configurazione-python-con-pyenv-livello-locale.html">configurare Python a livello locale</a>, cioè a livello di singola directory.<br />
<br />
Se ad esempio un vostro progetto ha bisogno di usare una specifica versione di Python differente da quella globale, potete configurare la versione necessaria solo per la directory che ospita il vostro progetto, a livello globale continueranno a funzionare le versioni già impostate.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-74350568569300682872013-12-03T09:41:00.000+01:002014-08-19T10:19:45.974+02:00Installazione di Python con PyenvDopo aver visto <a href="http://distillatodipython.blogspot.it/2013/11/installazione-pyenv-tool-gestione-piu-versioni-multiple-python.html">come installare pyenv</a> sul vostro sistema (se non l'avete fatto leggete il post, ci sono un po' di dipendenze da installare prima di procedere con le indicazioni che trovate qui), iniziamo finalmente ad usarlo per renderci ancora più facile e divertente la vita di sviluppatori Python.<br />
<br />
Se vi state chiedendo perché mai pyenv dovrebbe avere tale effetto, allora non avete letto il post di <a href="http://distillatodipython.blogspot.it/2013/11/pyenv-installare-gestire-piu-versioni-python.html" target="_blank">presentazione di pyenv</a>. Fatelo, vi aiuterà a chiarirvi le idee su cos'è e cosa fa.<br />
<br />
In questo post vedremo invece come usare usare pyenv per installare una o più versioni di Python. Ma quali sono le versioni disponibili in pyenv? Chiedeteglielo:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">pyenv install --list</span><br />
<span style="font-family: "Courier New",Courier,monospace;">Available versions:<br /> 2.4<br />...<br /> 2.4.6<br /> 2.5<br /> 2.5.1<br />... </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> 2.7.6</span><br />
<span style="font-family: "Courier New",Courier,monospace;">... </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> 3.3.3<br /> 3.3-dev<br />...</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> 3.4.0b1<br /> 3.4-dev<br /> jython-2.5.0<br />...<br /> pypy-1.5<br />... </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> pypy3-2.1-beta1<br /> pypy3-2.1-beta1-src<br />...<br /> stackless-2.7.2<br />...</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> stackless-3.3-dev<br /> stackless-dev</span><br />
<br />
Come potete notare, nonostante la lista sia stata abbondantemente tagliata è comunque molto lunga. Si parte da Python 2.4 risalente al 2004, fino al 3.4 ancora in fase di sviluppo nel momento in cui scrivo, passando per versioni particolari come <a href="http://pypy.org/" rel="nofollow" target="_blank">PyPy</a>.<br />
<br />
Fate attenzione: potrebbe accadere che sia stata rilasciata una nuova versione di Python eppure nella lista non c'è. Ci possono essere 2 motivi per cui questo accade:<br />
<ol>
<li>è già da un po' che avete installato pyenv sul vostro computer ed <a href="http://distillatodipython.blogspot.com/2013/12/come-aggiornare-pyenv.html">è ora di aggiornarlo</a>;</li>
<li>la nuova versione è stata appena rilasciata. In questo caso date prima il tempo all'autore di aggiornare <a href="https://github.com/yyuu/pyenv" rel="nofollow" target="_blank">pyenv su github</a> e poi tornate al punto 1.</li>
</ol>
Negli esempi che seguono installerete:<br />
<ul>
<li>Python 2.6.9;</li>
<li>Python 2.7.6;</li>
<li>Python 3.2.5;</li>
<li>Python 3.3.3.</li>
</ul>
Perché così tante versioni? Perché ci serviranno per vedere tutte le caratteristiche di pyenv nei prossimi post, sopratutto quella che è il suo punto di forza: l'enorme flessibilità e facilità con cui riesce a gestire contemporaneamente più versioni di Python.<br />
<br />
Aprite una shell (terminale) e iniziamo con l'installazione di Python 2.7.6 che avverrà nella directory <span style="font-family: "Courier New",Courier,monospace;">~/.pyenv</span> della vostra home:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">pyenv install 2.7.6</span><br />
<br />
In modo del tutto automatico partirà il dowload e poi la compilazione dei sorgenti Python:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">Downloading Python-2.7.6.tgz...<br />Installing Python-2.7.6...</span><br />
<br />
Mettetevi comodi: a seconda della velocità della vostra connessione Internet e la potenza del vostro sistema, potrebbero servire anche diversi minuti per completare l'installazione di Python.<br />
<br />
Ne approfitto per ricordarvi che il download non avviene dal sito ufficiale di Python, bensì dal <a href="http://distillatodipython.blogspot.it/2013/11/installazione-pyenv-tool-gestione-piu-versioni-multiple-python.html#pyenv_mirror">mirror dedicato di pyenv</a>.<br />
<br />
Terminata l'installazione riceverete il messaggio<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"><b>Installed</b> Python-2.7.6 to ~/.pyenv/versions/2.7.6</span><br />
<br />
che vi indica cosa è stato installato (<span style="font-family: "Courier New",Courier,monospace;">Python-2.7.6</span>) e dove (<span style="font-family: "Courier New",Courier,monospace;">~/.pyenv/versions/2.7.6</span><span style="font-family: "Courier New",Courier,monospace;"></span>), e automaticamente parte anche l'installazione del bonus offerto da pyenv.<br />
<br />
Si tratta dell'installazione di <a href="http://distillatodipython.blogspot.it/2013/11/sezione-risorse-python-update4.html#pip">pip, il gestore di pacchetti Python</a> che dalla versione 3.4 è disponibile di default: <br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">Downloading setuptools-1.4.tar.gz...<br />-> https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.tar.gz<br />Installing setuptools-1.4...</span><br />
<span style="font-family: "Courier New",Courier,monospace;">Installed setuptools-1.4 to ~/.pyenv/versions/2.7.6</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">Downloading pip-1.4.1.tar.gz...<br />-> https://pypi.python.org/packages/source/p/pip/pip-1.4.1.tar.gz<br />Installing pip-1.4.1...</span><br />
<span style="font-family: "Courier New",Courier,monospace;"><b>Installed pip-1.4.1</b> to ~/.pyenv/versions/2.7.6</span><br />
<br />
Ora dovete informare pyenv dell'installazione del nuovo Python sul vostro sistema. Lo fate con il comando:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">pyenv rehash</span><br />
<br />
E con questo avete appena finito di installare Python 2.7.6. Facile, vero? Procedete allo stesso modo per installare anche Python 3.3.3 con il comando<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">pyenv install 3.3.3</span><br />
<span style="font-family: "Courier New",Courier,monospace;">pyenv rehash</span><br />
<br />
poi proseguite con la 2.6.9 e la 3.2.5 e avete finito.<br />
<br />
Pyenv è davvero potente e facile da usare! Potete finalmente installare tutte le versioni di Python che volete in pochi attimi. Potete pensare di usare finalmente sempre la versione più aggiornata senza doversi lanciare in compilazioni da sorgente litigando con dipendenze insoddisfatte, ne dovete aspettare che qualche anima pia, se c'è, crei i pacchetti per la vostra distribuzione e vi cavi d'impaccio.<br />
<br />
Ma sopratutto, potete fare tutto senza andare a interferire con i file di sistema della vostra distribuzione che resta li intonsa e lontana dal pericolo di malfunzionamenti.<br />
<br />
Nel prossimo post vedremo come usare pyenv per <a href="http://distillatodipython.blogspot.it/2013/12/configurazione-di-python-con-pyenv-livello-globale.html">configurare una o più versioni di Python</a> per poterle usarle nello sviluppo dei vostri programmi.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-81589587089509300462013-11-29T09:00:00.000+01:002014-08-19T10:19:45.990+02:00Installazione di Pyenv, il tool per la gestione di versioni multiple di PythonDopo l'ampia <a href="http://distillatodipython.blogspot.it/2013/11/pyenv-installare-gestire-piu-versioni-python.html">presentazione di pyenv</a>, il tool per installare e gestire in contemporanea più versioni di Python, vediamo ora come installarlo sulla vostra macchina di sviluppo.<br />
<br />
Prima due piccole precisazioni:<br />
<ol>
<li>pyenv è basato su script Bash, per cui a differenza di tools simili,
potete installarlo anche su macchine su cui Python non è presente.
Indubbiamente un grande vantaggio; </li>
<li>l'installazione non scarica i file originali dal sito ufficiale Python, bensì dal <a href="http://yyuu.github.io/pythons/" name="pyenv_mirror" rel="nofollow" target="_blank">mirror dedicato di pyenv</a>.</li>
</ol>
Detto questo, procediamo.<br />
<br />
Aprite una shell (terminale) e <b>installiamo le dipendenze</b> per poter compilare correttamente i sorgenti di Python.<br />
<br />
Per <u>Ubuntu, Debian e distribuzioni derivate</u>:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">sudo apt-get install build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev git</span><br />
<br />
Per <u>Fedora e derivate</u>:<br />
<br />
date il comando <span style="font-family: "Courier New",Courier,monospace;">su</span> e inserite la password amministrativa quando richiesto, poi date il comando<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel gdbm-devel ncurses-devel glibc-devel git</span><br />
<br />
Bene, sistemate le dipendenze iniziamo l'installazione vera e propria che avverrà nella directory <span style="font-family: "Courier New",Courier,monospace;">~/.pyenv</span> nella vostra home creata automaticamente dall'installazione.<br />
<br />
<b>Clonate il repository git di pyenv</b>,<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">cd<br />git clone git://github.com/yyuu/pyenv.git .pyenv</span><br />
<br />
e <b>modificate</b> alcune <b>variabili d'ambiente</b> per renderlo funzionante.<br />
<br />
Solo per <u>Ubuntu, Debian e derivate</u>:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc<br />echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc</span><br />
<br />
e abilitate shims (spiegherò in un eventuale altro post di cosa si tratta) e l'autocompletamento per pyenv:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">echo 'eval "$(pyenv init -)"' >> ~/.bashrc</span><br />
<br />
Per <u>utenti di shell Zsh</u>: nei precedenti comandi sostituite <span style="font-family: "Courier New",Courier,monospace;">~/.bashrc</span> con <span style="font-family: "Courier New",Courier,monospace;">~/.zshenv</span><br />
<br />
Per <u>gli altri</u>: nei precedenti comandi sostituite <span style="font-family: "Courier New",Courier,monospace;">~/.bashrc</span> con <span style="font-family: "Courier New",Courier,monospace;">~/.bash_profile</span><br />
<br />
Avete finito.<br />
<br />
Per essere sicuri che tutte le modifiche siano state fatte correttamente, riavviate il sistema e nel terminale date il comando:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">pyenv</span><br />
<br />
Se la risposta che ottenete è qualcosa di simile a<br />
<span style="font-family: "Courier New",Courier,monospace;"><br />pyenv 0.4.0-20131116-8-gbc2d245<br />Usage: pyenv <command> [<args>]</span><br />
<span style="font-family: "Courier New",Courier,monospace;">... </span><br />
<br />
allora pyenv funziona.<br />
<br />
Nel prossimo post vedremo come usarlo per <a href="http://distillatodipython.blogspot.it/2013/12/installazione-di-python-con-pyenv.html">installare una o più versione di Python</a> sul nostro sistema.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-83948122150615819542013-11-25T10:55:00.000+01:002014-08-19T10:19:45.993+02:00Anteprima pyenv, il tool per installare e gestire più versioni di Python<b>Pyenv</b> è un <b>tool per l'installazione e la gestione di versioni multiple di Python</b> su sistemi Unix/Linux e Mac OS X.<br />
<br />
Grazie a <a href="https://github.com/yyuu/pyenv" rel="nofollow" target="_blank">pyenv</a>
potete installare tutte le versioni che volete di Python a partire
dalla vecchissima 2.4, credo risalga al 2004, fino alla versione 3.4
ancora in fase di sviluppo nel momento in cui scrivo.<br />
<br />
La
facilità d'installazione è davvero disarmante: basta un comando con
l'indicazione della versione di Python che volete sul vostro sistema, e a
tutto il resto ci pensa pyenv.<br />
<br />
Vi scarica il sorgente
di Python, ve lo compila, e vi installa il tutto in un'apposita
directory creata in automatico nella home dell'utente, così da non
sporcare l'installazione di default di Python eventualmente già presente
sul vostro sistema.<br />
<br />
Ad esempio sulla mia Ubuntu 12.04
LTS ho già installati Python 2.7.3 e Python 3.2.3 direttamente dai
repository della distribuzione. Grazie a pyenv ho installato anche la
versione 2.7.6 e la 3.3.3 senza che esse interferiscano minimamente con
le altre.<br />
<br />
La comodità dell'installazione di Python con pyenv è eccezionale, ma il meglio deve ancora arrivare perché pyenv tira fuori il meglio di se quando lo usate per gestire
quale versione o versioni, si, anche più d'una contemporaneamente, volete usare sul vostro
sistema.<br />
<br />
Ad esempio, potete sostituire l'uso della
versione 2.7.3 con la 2.7.6 in tutto il sistema, oppure solo in una
specifica directory: quando siete in questa directory, se avviate Python
parte la versione 2.7.6 come qui sotto,<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">$ python<br />Python 2.7.6 (default, Nov 22 2013, 09:22:29) <br />[GCC 4.6.3] on linux2<br />Type "help", "copyright", "credits" or "license" for more information.</span><br />
<br />
ma appena uscite da questa directory riprende a funzionare la solita 2.7.3:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">$ python<br />Python 2.7.3 (default, Sep 26 2013, 20:03:06) <br />[GCC 4.6.3] on linux2<br />Type "help", "copyright", "credits" or "license" for more information.</span><br />
<br />
E se volete, potete arrivare ad una granularità così fine da configurare
l'uso di una certa versione di Python solo all'interno della shell
(terminale) corrente.<br />
<br />
Ma non finisce qui, perché come vi dicevo, nulla
vi vieta di configurare l'uso di più versioni di Python
contemporaneamente, ad esempio la 2.6, 2.7 e la 3.3, così da poter ad
esempio fare delle prove e assicurarvi che il vostro software sia
compatibile con tutte e tre:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">$ python2.6</span><br />
<span style="font-family: "Courier New",Courier,monospace;">Python 2.6.9 (unknown, Nov 22 2013, 22:52:18) <br />[GCC 4.6.3] on linux3<br />Type "help", "copyright", "credits" or "license" for more information.</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">$ python2.7</span><br />
<span style="font-family: "Courier New",Courier,monospace;">Python 2.7.6 (default, Nov 22 2013, 09:22:29) <br />[GCC 4.6.3] on linux2<br />Type "help", "copyright", "credits" or "license" for more information.</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">$ python3.3</span><br />
<span style="font-family: "Courier New",Courier,monospace;">Python 3.3.3 (default, Nov 22 2013, 09:28:26) <br />[GCC 4.6.3] on linux<br />Type "help", "copyright", "credits" or "license" for more information.</span> <br />
<br />
Non vi ho ancora convinti della bontà di pyenv?<br />
<br />
Allora sappiate che in ogni versione di Python che
pyenv installa sul vostro sistema ci trovate anche <a href="http://distillatodipython.blogspot.it/2013/11/sezione-risorse-python-update4.html">pip, il gestore di pacchetti Python</a> che dalla versione 3.4 è disponibile di default.<br />
<br />
A
questo punto anche l'installazione di ulteriori pacchetti Python, da
Django passando per SciPy fino a PIL/Pillow e tutto il resto
dell'immenso repository che è <a href="https://pypi.python.org/pypi" rel="nofollow" target="_blank">PyPI (Python Package Index)</a> con i suoi
37036 pacchetti al momento in cui scrivo (e continua a crescere), diventa questione di un solo
comando pyenv: poi come al solito ci pensa lui a tutto il resto.<br />
<br />
Non vi ho ancora convinti a provare pyenv? Caspita quanto siete difficili! :-D<br />
Allora è arrivato il momento di metter giù il carico da 90. <br />
<br />
Che ne dite se con pyenv oltre a pip, il gestore di pacchetti Python, potete usare anche <a href="http://www.virtualenv.org/en/latest/index.html" rel="nofollow" target="_blank">virtualenv</a>,
il tool per la creazione di ambienti virtuali Python? Non direttamente, per farlo bisogna prima installare un
apposito plugin, <a href="https://github.com/yyuu/pyenv-virtualenv" rel="nofollow" target="_blank">pyenv-virtualenv</a>, ma è questione di attimi ed una volta fatto gestire virtualenv diventa un gioco da ragazzi.<br />
<br />
Grazie a virtualenv potete creare uno o più ambienti virtuali Python completamente isolati dal resto del sistema così da non interferire con esso. In
ognuno di questi ambienti virtuali avrete una copia del Python di sistema su cui installare tutte le librerie che volete, e nella versione che più vi
aggrada.<br />
<br />
Per esempio, in un ambiente virtuale
installate Django 1.5, in un altro la versione 1.6, e tutto questo senza
che si crei il minimo conflitto tra di loro, ne con le librerie di sistema perché ognuna ha il suo
ambiente virtuale completamente isolato da tutto il resto.<br />
<br />
Il limite di questa soluzione è che comunque la vostra scelta della versione di Python disponibile nell'ambiente virtuale è limitata a quelle installate sul sistema. Ad esempio, sulla mia Ubuntu 12.04 sono le già citate versioni 2.7.3 e 3.2.3<br />
<br />
Ma l'accoppiata pyenv + virtualenv gestito tramite il plugin pyenv-virtualenv è così potente che permette di superare questo limite: potete creare un ambiente virtuale scegliendo la versione
di Python su cui costruirlo sia fra quelle di sistema, sia fra tutte quelle disponibili e installate in pyenv stesso, che lo ricordo vanno dalla 2.4 alla 3.4, e altre si aggiungeranno in futuro man mano saranno rese disponibili dalla comunità Python.<br />
<br />
Per esempio, potreste costruire 3 ambienti virtuali completamente separati con:<br />
<ul>
<li>Python 2.6 + Django 1.4; </li>
<li>Python 2.7 + Django 1.5;</li>
<li>Python 3.3 + Django 1.6;</li>
</ul>
Avete la totale libertà di scelta sia per quanto riguarda la
versione Python da usare, sia per quanto riguarda le versioni delle
varie librerie/moduli/framework che potete usare nel vostro lavoro: niente male, vero?<br />
<br />
Un'ultima chicca: essendo basato su script Bash, pyenv <u>non</u> ha bisogno di Python per funzionare. Questo significa che potrete installarlo anche su macchine dove Python non è presente e godere lo stesso di tutti i vantaggi che abbiamo visto fin qui.<br />
<br />
Su, ci dovremmo essere, dovreste ormai esservi convinti a provare pyenv.<br />
<br />
Nella serie di post che seguiranno vedremo <a href="http://distillatodipython.blogspot.it/2013/11/installazione-pyenv-tool-gestione-piu-versioni-multiple-python.html">come installare e usare pyenv</a> per renderci ancora più comoda e divertente la
vita da programmatori Python.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-4729350700492173322013-11-23T17:33:00.001+01:002013-12-05T10:24:06.934+01:00Sezione "Risorse Python" del blog: aggiornamento 4Quarto aggiornamento per la sezione "<a href="http://distillatodipython.blogspot.it/p/risorse-python.html" target="_blank">Risorse Python</a>" del blog. Ho aggiunto:<br />
<ul>
<li>la nuova sezione "Environment Management" con la prima entry, <b>pyenv</b>;</li>
<li>la nuova sezione "Package Management" con la prima entry, <b>pip</b>.</li>
</ul>
<b><a href="http://distillatodipython.blogspot.it/2013/11/pyenv-installare-gestire-piu-versioni-python.html" name="pyenv">Pyenv</a></b> è un tool per la gestione di installazioni multiple di Python su sistemi Unix/Linux, Mac OS X.<br />
<br />
Immaginate di voler installare sul vostro sistema diverse versioni di
Python, ad esempio le versioni 2.6.9, 2.7.6 e 3.3.3 per essere sicuri
che il vostro software non abbia problemi di compatibilità: ecco, pyenv
fa al caso vostro.<br />
<br />
Potrete scegliere quale versioni di Python usare, a partire dalla vetusta 2.4 fino alla 3.4 in questo momento ancora in fase di sviluppo. Potrete decidere se usare una certa versione a livello globale o solo per una specifica directory, o
anche solo per il terminale che state usando in quel momento. Potrete impostare l'uso contemporaneo di più versioni di Python.<br />
<br />
E se qualcuno dovesse chiedersi "<i>ma non è quello che fa virtualenv?</i>", la risposta è no, fanno cose diverse ma che si completano a vicenda.<br />
<br />
Comunque di pyenv ne parlerò in una serie di prossimi post per cui sarà chiara la differenza.<br />
<br />
<b><a name="pip">Pip</a></b> invece è un tool per l'installazione e gestione di pacchetti software Python in ambienti Unix/Linux, OS X, Windows.<br />
<br />
Chi usa Python per lo sviluppo forse conosce e usa già EasyInstall a questo scopo, ma pip ha una marcia in più, e dalla versione 3.4 di Python è <a href="http://distillatodipython.blogspot.it/2013/11/pip-disponibile-default-python-34.html">disponibile di default</a> nell'installazione standard.<br />
<br />
Se vi aggiungiamo il fatto che anche pyenv in ogni installazione Python che gestisce vi installa pip in modo predefinito, abbiamo due buoni motivi in più per dargli un'occhiata.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-7486493711650663002013-11-20T07:52:00.000+01:002013-12-02T07:18:53.936+01:00Sezione "Risorse Python" del blog: aggiornamento 3Terzo aggiornamento per la sezione "<a href="http://distillatodipython.blogspot.it/p/risorse-python.html" target="_blank">Risorse Python</a>" del blog. Ho aggiunto:<br />
<ul>
<li>il videocorso "<i>Google's Python Class</i>" di Google Developers per Python 2.x;</li>
<li>il corso universitario online del MIT OpenCourseWare tenuto da John Guttag, "<i>6.00SC Introduction to Computer Science and Programming</i>", sempre con Python 2.x.</li>
</ul>
Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-18820964859415839162013-11-19T11:05:00.000+01:002014-08-19T10:19:45.937+02:00Rilasciata nuova release Python 3.3.3Nuovo aggiornamento per il ramo 3.x: è stata rilasciata la <a href="http://www.python.org/download/releases/3.3.3/" rel="nofollow" target="_blank">versione 3.3.3 di Python</a> con numerosi bugfix.<br />
<br />
C'è anche da ricordare che questa versione rispetto alla precedente 3.2, apporta ulteriori miglioramenti al linguaggio che lo rendono una scelta sempre più interessante rispetto al precedente ramo 2.x.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-16948108051662513992013-11-19T10:32:00.000+01:002013-12-05T10:22:25.977+01:00Sezione "Risorse Python" del blog: aggiornamento 2Secondo aggiornamento per la sezione "<a href="http://distillatodipython.blogspot.it/p/risorse-python.html" target="_blank">Risorse Python</a>" del blog: ho aggiunto il videocorso di <a href="http://beri.it/" rel="nofollow" target="_blank">Marco Beri</a> su Python 2.x.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-63494418444465124122013-11-16T10:33:00.001+01:002014-08-19T10:19:45.972+02:00Pip disponibile di default a partire da Python 3.4Per chi non lo conoscesse, <a href="http://www.pip-installer.org/en/latest/" rel="nofollow" target="_blank">pip è un tool</a> per l'installazione e la gestione di pacchetti Python disponibile per sistemi operativi Unix/Linux, OS X, Windows, e versioni Python a partire da 2.6, passando per 2.7, 3.1, 3.2, fino all'ultima 3.3 e senza lasciare fuori <a href="http://pypy.org/" rel="nofollow" target="_blank">PyPy</a>.<br />
<br />
È perfetto per evitare di doversi barcamenare con modalità diverse d'installazione a seconda del sistema operativo, e permette una gestione molto raffinata dei pacchetti.<br />
<br />
La cosa non esaltante è che al momento va installato separatamente dopo l'installazione di Python sulla vostra macchina di sviluppo.<br />
<br />
La buona notizia è che dalla versione 3.4 di Python <a href="http://www.python.org/dev/peps/pep-0453/" rel="nofollow" target="_blank">pip sarà disponibile di default</a> nell'installazione standard.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-43138165144675921322013-11-10T23:54:00.001+01:002014-08-19T10:19:45.963+02:00Rilasciata nuova release Python 2.7.6È stata rilasciata la <a href="http://www.python.org/download/releases/2.7.6/" rel="nofollow" target="_blank">versione 2.7.6 di Python</a>.<br />
<br />
Com'è noto non sono previste nuove feature, si tratta esclusivamente di bugfix che andranno avanti fino alla versione finale, la <a href="http://www.python.org/dev/peps/pep-0373/#maintenance-releases" rel="nofollow" target="_blank">2.7.9 prevista per Maggio 2015</a>.<br />
<br />
A quel punto lo sviluppo del ramo 2.x potrà dirsi definitivamente concluso e si continuerà sul solo ramo 3.x.Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-61788800655262658212013-11-09T16:20:00.000+01:002014-08-19T10:19:45.969+02:00Six: libreria per la compatibilita tra Python 2.x e Python 3.xUno dei dilemmi per chi inizia a studiare/usare Python è se concentrarsi su Python 2 oppure il più recente Python 3. Spesso la scelta è a favore del primo perché, fra gli altri motivi, alcune librerie/framework non supportano ancora Python 3.<br />
<br />
Con la <a href="http://packages.python.org/six/" rel="nofollow" target="_blank">libreria di compatibilità Six</a>, il cui nome deriva da <span style="font-family: Courier New, Courier, monospace;">2 * 3 = 6</span>, il prodotto dei numeri delle versione di Python coinvolte, è stato creato un wrapper che nascondendo le differenze permette a molte di queste librerie/framework di funzionare con entrambi le versioni di Python.<br />
<br />
Tanto per dire, <a href="https://docs.djangoproject.com/en/dev/topics/python3/" rel="nofollow" target="_blank">Django dalla versione 1.5</a> usa proprio Six per garantirsi la compatibilità sia con Python 2 (≥ 2.6.5) che con Python 3 (≥ 3.2).Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0tag:blogger.com,1999:blog-1435812705036190567.post-52228011506498645022013-11-09T15:08:00.000+01:002014-08-19T10:19:45.966+02:00La storia di Python raccontata dal suo creatoreGuido van Rossum che racconta la storia della sua creatura.<br />
<br />
Buona visione.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/ugqu10JV7dk" width="640"></iframe>
Anonymoushttp://www.blogger.com/profile/08906788203466211385noreply@blogger.com0