更改当前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

我有一个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 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作为条形码导入?