Python 3.4:从阅读其他一些SO问题看来,如果moduleName.py
文件在当前目录之外,如果要导入它,则必须将其添加到sys.path.insert(0, '/path/to/application/app/folder')
的路径中,否则import moduelName
语句会导致此错误:
ImportError: No module named moduleName
这是否意味着python会自动将同一目录中的所有其他.py文件添加到路径中?在表面下发生了什么,允许您导入本地文件而不附加Python的路径? __init__.py
文件在表面下做了什么?
答案 0 :(得分:10)
Python将初始脚本所在的目录作为第一项添加到sys.path
:
在程序启动时初始化时,此列表的第一项
的结果插入条目之前插入了脚本目录path[0]
是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果以交互方式调用解释器或者从标准输入读取脚本),path[0]
是空字符串,它指示Python首先搜索当前目录中的模块。请注意,在PYTHONPATH
。
因此,表面下的内容是Python将“本地”目录附加(或更确切地说,预先添加)到sys.path
为您。
这只是意味着脚本所在的目录是搜索模块时的第一个调用端口。
__init__.py
与这一切无关。将目录设为(regular) package需要__init__.py
;在Python模块搜索路径中找到的任何此类目录都被视为模块。