我正在尝试将大型Python脚本转换为软件包。我具有以下文件结构:
bin/foob # The main Python script
lib/foob/__init__.py
文件lib / foob / __ init__.py定义了一个类:
class Node(object):
def __init__(self):
self.test = True
bin / foob文件具有:
import foob
def get_nodes():
x = foob.Node()
get_nodes()
我正在使用以下脚本运行
:$ PYTHONPATH=PYTHONPATH:~/foob/lib ~/foob/bin/foob
我得到的错误是:
Traceback (most recent call last):
File "/home/person/foob/bin/foob", line 6, in <module>
x = get_nodes()
File "/home/person/foob/bin/foob", line 4, in get_nodes
node_obj = foob.Node()
AttributeError: module 'foob' has no attribute 'Node'
此结构似乎与我编写的另一个程序完全相同。我想念什么?
答案 0 :(得分:0)
我认为问题是命名冲突。您正在导入模块IgnoreCase
而不是findBy
。
bin/foob
时,Python解释器将按以下顺序搜索:
- 内置模块。
- 当前目录。
- 环境变量:PYTHONPATH
- 其他一些目录。(与此问题无关)
lib/foob
可以看到其中的最后三个
似乎您在import
中,因此import sys; sys.path
是您要导入的内容。可以通过bin/foob
进行检查。
我建议您避免使用相同的名称。