У меня есть пакет сторонних разработчиков с открытым исходным кодом "foo"; это находится в стадии бета-тестирования, и я хочу настроить его в соответствии с моими требованиями. Поэтому я не хочу устанавливать его в / usr / local / lib / python или где-либо в текущем sys.path, поскольку я не могу часто вносить изменения в пакеты верхнего уровня.
foo/
__init__.py
fmod1.py
import foo.mod2
fmod2.py
pass
Я хочу установить пакет "foo" как подпакет моего пространства имен скажем "team.my_pkg". Таким образом, «полное имя» пакета становится «team.my_pkg.foo» без изменения кода во внутренних модулях, которые называют «team.my_pkg.foo» как «foo».
team/
__init__.py
my_pkg/
__init__.py
foo/
fmod1.py
import foo.mod2
fmod2.py
pass
Один из способов сделать это - сделать это в team.my_pkg. init .py:
import os.path
import sys
sys.path.append(os.path.dirname(__file__))
Но я думаю, что это очень небезопасно. Я надеюсь, что есть способ, которым только fmod1.py и fmod2.py могут вызывать «foo» по его короткому имени, все остальное должно использовать его полное имя «team.my_pkg.foo»
Я имею в виду, что это должно произойти за пределами команды / my_pkg / foo:
import team.my_pkg
import foo
Но это должно получиться за пределами команды / my_pkg / foo:
import team.my_pkg.foo