No entraré en la polémica sobre el cambio de nombre y en su lugar me centraré en mostrarte cómo hacer lo que quieres (si es "bueno para ti" o no ;-). La solución no es difícil ...
¡Acaba de configurar __path__
! Una pequeña demostración:
$ 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!
esto muestra un módulo de openid gestión para importar un paquete del mismo nombre a pesar de que el camino del módulo viene antes en sys.path, ysys.modules['openid']
está claramente ya se consigna en ese momento. Y todo el "secreto" está en código simple de openid.py ...:
print "Module!"
__path__ = ['/tmp/packages']
import openid
sin la asignación __path__
, por supuesto, sería solamente emiten Module!
.
También funciona para la importación de submódulos dentro del paquete, por supuesto. Do:
$ echo 'print "Submod!"' > /tmp/packages/openid/submod.py
y cambie openid.La última línea de py a
from openid import submod
y verá:
$ PYTHONPATH='/tmp/modules:/tmp/packages' python -c'import openid'
Module!
Package!
Submod!
$
'cambiar el nombre de su archivo' – SilentGhost
¿Cuál es la razón para no cambiar el nombre del archivo? Parece una solución pequeña en comparación con estar buscando una forma de evitarlo. – Zoomulator
El archivo debe llamarse semánticamente openid, ya que está en un módulo con "tipos" de alias. openid es el nombre del tipo. –