我在以下目录结构中有一个 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'
即它认为
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
关于python - 更改当前 python 脚本的命名空间(具有模块名称的类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14509426/