我是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
脚本中的。当然,还有其他两种方式,其中一些是直接导入,而另一些是from
导入。