Python 导入后,调用定义生成 NameError

After Python import, call to a definition is generating the NameError

我是 python 的新手,我正在尝试执行以下操作:

我有一个名为 app 的文件夹,这个文件夹有两个文件:main.py 和 init.py

main.py

def generate_report(x1, x2):
    print "Generating report..."
    print x1
    print x2 

if __name__ == "__main__":
    print "Running: main.py..."

    generate_reports(1, 2)

    print "Done!"

else:
    print "Imported: main.py..."

__init__.py

import main

现在在我的控制台中,如果我这样做:

import app

我得到:

Imported: main.py...

那么如果我尝试这样做:

generate_report(1, 2)

我收到以下错误:

NameError: name 'generate_report' is not defined

Python 中有两种不同的模块命名空间方法。在一种情况下,您执行 import blah,然后使用 blah.spam 访问 blah 的元素。在另一种情况下,您说 from blah import spam(或 *),然后直接按名称访问 blah 的元素。

问题是,你必须在每个级别上做出决定:如果你有一个包,你有两个这样的决定要做:你的脚本如何导入包(app 在你的情况下),以及你的应用程序的 __init__.py 如何导入 main(顺便说一句,模块的名字很糟糕;P)。

所以,一种解决方案是编写

from app import main

在你的 __init__.py

from app import generate_report

在你的脚本里,还有一个是写

app.main.generate_report

在你的脚本中。当然还有另外两种方式,有的是直接导入,有的是fromed.