Non voglio entrare nella polemica sulla ridenominazione e preferisco invece mostrarti come fare ciò che vuoi (se è "buono per te" o no ;-). La soluzione non è difficile ...
Basta impostare __path__
! Una piccola dimostrazione:
$ mkdir /tmp/modules /tmp/packages
$ mkdir /tmp/packages/openid
$ echo 'print "Package!"' > /tmp/packages/openid/__init__.py
$ gvim /tmp/modules/openid.py
$ PYTHONPATH='/tmp/modules:/tmp/packages' python -c'import openid'
Module!
Package!
questa mostra un modulo OpenID riuscendo a importare un pacchetto di omonima anche se il percorso del modulo viene fornito in precedenza in sys.path, esys.modules['openid']
è chiaramente già impostato in quel momento. E tutto il "segreto" è in semplice codice di openid.py ...:
print "Module!"
__path__ = ['/tmp/packages']
import openid
senza l'assegnazione __path__
, naturalmente, sarebbe solo emettere Module!
.
Funziona anche per l'importazione di sottomoduli all'interno del pacchetto, ovviamente. Do:
$ echo 'print "Submod!"' > /tmp/packages/openid/submod.py
e modificare openid.ultima linea di py per
from openid import submod
e vedrete:
$ PYTHONPATH='/tmp/modules:/tmp/packages' python -c'import openid'
Module!
Package!
Submod!
$
fonte
2009-08-11 15:20:26
'rinominare il file' – SilentGhost
Qual è il motivo per cui non rinominare il file? Sembra una piccola correzione rispetto a cercare un modo per aggirarla. – Zoomulator
Il file dovrebbe essere semanticamente chiamato openid, poiché si trova in un modulo con "tipi" di alias. openid è il nome del tipo. –