Python:是自动包含在路径中的当前目录吗?

All*_*ack 10 python path python-import importerror

Python 3.4:从阅读其他一些SO问题看来,如果moduleName.py文件在当前目录之外,如果要导入它,则必须将其添加到路径中sys.path.insert(0, '/path/to/application/app/folder'),否则import moduelName语句会导致此错误:

ImportError: No module named moduleName
Run Code Online (Sandbox Code Playgroud)

这是否意味着python会自动将同一目录中的所有其他.py文件添加到路径中?在表面下发生了什么,允许您导入本地文件而不附加Python的路径?又是什么一个__init__.py文件的表面下怎么办?

Mar*_*ers 13

Python将初始脚本所在的目录添加为第一项sys.path:

在程序启动时初始化时,此列表的第一项path[0]是包含用于调用Python解释器的脚本的目录.如果脚本目录不可用(例如,如果交互式调用解释器或者从标准输入读取脚本),path[0]则是空字符串,它指示Python首先搜索当前目录中的模块.请注意,脚本目录是在插入条目之前插入的PYTHONPATH.

那么,那张表面下是Python的追加(或者更确切地说,前置)"本地"目录sys.path .

这只是意味着脚本所在的目录是搜索模块时的第一个调用端口.

__init__.py与这一切无关.__init__.py需要将目录设为(常规)包 ; 在Python模块搜索路径中找到的任何此类目录都被视为模块.

  • @AlexHall 它永远不会成为当前工作目录。这是添加的脚本的位置。您经常在当前工作目录中运行脚本,这使得它看起来像是当前工作目录,但这是巧合,也是不幸的情况。您很少“希望”添加当前工作目录,因为这意味着脚本导入的内容取决于用户当前在文件系统上的位置,这将导致难以调试的问题。 (3认同)