为什么我的Python软件包找不到我的班级?

时间:2019-05-16 14:02:06

标签: python python-3.x package

我正在尝试将大型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'

此结构似乎与我编写的另一个程序完全相同。我想念什么?

1 个答案:

答案 0 :(得分:0)

我认为问题是命名冲突。您正在导入模块IgnoreCase而不是findBy

Python导入序列

bin/foob时,Python解释器将按以下顺序搜索:

  
      
  1. 内置模块。
  2.   
  3. 当前目录。
  4.   
  5. 环境变量:PYTHONPATH
  6.   
  7. 其他一些目录。(与此问题无关)
  8.   

lib/foob可以看到其中的最后三个


似乎您在import中,因此import sys; sys.path是您要导入的内容。可以通过bin/foob进行检查。

我建议您避免使用相同的名称。