我有一个包第三方开源软件包“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”
我的意思是这应该在team / my_pkg / foo之外失败:
import team.my_pkg
import foo
但是这应该在team / my_pkg / foo:
之外成功import team.my_pkg.foo
答案 0 :(得分:2)
So I don't want to get it installed in /usr/local/lib/python or anywhere in current sys.path as I can't make frequent changes in top level packages.
有什么问题:
python setup.py develop
答案 1 :(得分:0)
使用explicit relative imports允许可重定位的子包引用自己。例如在fmod1.py中:
from . import mod2