Я не буду вдаваться в полемику по поводу переименования, а вместо этого сосредоточусь на том, чтобы показать вам, как делать то, что вы хотите (будь то «хорошо для вас» или нет ;-). Решение не сложное ...
Просто установите __path__
! Небольшая демонстрация:
$ 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!
здесь показан модуль openid, управляющий импортом одноименного пакета , хотя путь к модулю указывается ранее в sys.path, и sys.modules['openid']
явно уже установлено в то время. И весь «секрет» в простом коде openid.py ...:
print "Module!"
__path__ = ['/tmp/packages']
import openid
без назначения __path__
, конечно, он будет излучать только Module!
.
Также работает для импорта подмодулей внутри пакета, конечно. Есть:
$ echo 'print "Submod!"' > /tmp/packages/openid/submod.py
и измените последнюю строку openid.py на
from openid import submod
и вы увидите:
$ PYTHONPATH='/tmp/modules:/tmp/packages' python -c'import openid'
Module!
Package!
Submod!
$