更改当前python脚本的命名空间(具有模块名的类)
我有一个2.6 python脚本和库,其目录结构如下:更改当前python脚本的命名空间(具有模块名的类),python,import,namespaces,Python,Import,Namespaces,我有一个2.6 python脚本和库,其目录结构如下: + bin \- foo.py + lib \+ foo \- bar.py 我希望用户运行bin/foo.py来实例化lib/foo.py中的类。为此,在我的bin/foo.py脚本中,我有以下代码: from __future__ import absolute_import import foo klass = foo.bar.Klass() 然而,这导致: AttributeError: 'module' object has
+ bin
\- foo.py
+ lib
\+ foo
\- bar.py
我希望用户运行bin/foo.py
来实例化lib/foo.py
中的类。为此,在我的bin/foo.py
脚本中,我有以下代码:
from __future__ import absolute_import
import foo
klass = foo.bar.Klass()
然而,这导致:
AttributeError: 'module' object has no attribute 'bar'
ie认为foo
本身而不是库foo
——将bin/foo.py
重命名为bin/foo script.py
效果如预期
是否有办法保留
bin/foo.py
脚本并导入lib/foo.py
?默认情况下,当前目录位于路径上,因此您需要在导入其他foo
模块之前删除该路径:
import sys
sys.path = [dir for dir in sys.path if dir != '']
或者,在lib
目录前加上前缀,使其优先:
import sys
sys.path = ['../lib'] + sys.path
如果您只是编写importfoo,它肯定会在当前范围内加载foo模块。假设lib和foo都是包,那么您是否需要编写类似这样的东西才能使其工作
import lib.foo.bar as foobar
klass = foobar.Klass()
您是否尝试过将foo作为条形码导入?