[Python] Cartelle di Python su linux

Daniele Varrazzo piro a develer.com
Ven 30 Nov 2012 19:49:02 CET


On 2012-11-30 18:41, Marco Giusti wrote:
> On Fri, Nov 30, 2012 at 05:13:11PM +0000, piergiorgio pancino wrote:
>> Ciao,
>> forse è più una domanda di linux che non di python... comunque...
>> potreste spiegarmi brevemente come si organizzano i file e le 
>> librerie
>> su linux?  Su windows mi è chiaro nel senso che è tutto con dentro 
>> la
>> cartella di Python e le librerie aggiunte sono su site-packages, ma 
>> su
>> linux? Vedo che viene spezzata la parte di file utente e il software
>> in se.
>
> in breve:
>
> 	python -c 'import sys; sys.path'
>
> queste sono tutte le directory dove vengono cercati i moduli python. 
> In
> realtà è ben più crudele e i moduli possono trovarsi anche altrove
> oppure non trovarsi affatto sul computer[1]. per approfondire,
> pep-420[2].
>
> [1] http://pypi.python.org/pypi/urlimport/
> [2] http://www.python.org/dev/peps/pep-0420/
>
>> Dove devo mettere mano se voglio modificare le librerie? E i file
>> compilati in C dove sono?
>
> dipende quali librerie vuoi modificare. chiamiamoli moduli da qui in
> avanti. se il modulo non fa' parte della libreria standatd di python 
> e
> hai possibilità semplicamente disinstallalo e installa la tua 
> versione
> modificata. in caso contrario puoi "semplicemente" rimpiazzare una
> funzione o classe con la tua versione aggiornata:
>
> 	import zazza
> 	zazza.funzione_cool = funzione_piu_cool
>
> ma in questo caso preparati ad essere colto da tarantismo.
>
> In generale su linux i moduli possono essere "di sistema", ovvero
> installati attraverso i vari tool della tua distribuzione (i.e. in
> debian: sudo apt-get install python-lxml) oppure puoi installarli 
> nella
> tua home e istruire l'interprede su dove andare a cercarli. io usavo
> fare così:
>
> 	$ mkdir -p ~/.local/lib/python2.7/site-packages
> 	$ echo export PYTHONPATH="$HOME"/.local/lib/python2.7/site-packages
> >> .bashrc
>
> adesso però virtualenv e virtualenv-wrapper sono molto più comodi.

Mi sembra, da quello che ho visto ultimamente, che la cosa sia un po' 
più ordinata rispetto a un po' di versioni fa. O forse è solo 
un'organizzazione che ubuntu ha raffinato nelle ultime release. A me 
comunque c'è:

- /usr/lib/pythonX.Y/: la stdlib di python
- /usr/lib/pythonX.Y/dist-packages/: i package installati col package 
manager di sistema (e.g. apt-get install python-foo)
- /usr/local/lib/pythonX.Y/dist-packages/: i package installati 
"manualmente" come root, per tutto il sistema
   (e.g. "sudo pip install foo" o "sudo python setup.py install")
- $HOME/.local/lib/pythonX.Y/site-packages/: i package installati 
"manualmente" con il singolo utente
   (e.g. "pip install --user foo" o "python setup.py install --user")

L'ultima locazione, in particolare, non l'avevo notata prima, e mi 
sembra comoda. In passato, inoltre, mi sembra che /usr/local/lib non 
fosse usato, ma potrei sbagliare. Su ubuntu, per queste directory, non 
occorre neanche manipolare il PYTHONPATH: python le conosce già.


-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python