这个Python导入如何工作?

时间:2014-12-03 15:51:11

标签: python

我在同一目录中有两个文件,并且在任何地方都没有__init__.py个文件:

c:\work\test>tree
.
|-- a
|   `-- a
|       |-- a1.py
|       `-- a2.py
`-- b

一个文件导入另一个文件:

c:\work\test>type a\a\a1.py
print 'a1-start'
import a2
print 'a1-end'

c:\work\test>type a\a\a2.py
print 'a2'

即使从完全不同的位置运行,导入也会成功:

c:\work\test\b>python ..\a\a\a1.py
a1-start
a2
a1-end

我正在运行

c:\work\test>python -V
Python 2.7.3

并且未设置我的PYTHONPATH和PYTHONHOME变量

c:\work\test>echo %PYTHONPATH% %PYTHONHOME%
%PYTHONPATH% %PYTHONHOME%

a1.py如何找到a2

1 个答案:

答案 0 :(得分:8)

来自module docs(强调我的)的引用:

“当导入名为spam的模块时,解释器首先搜索具有该名称的内置模块。如果未找到,则会在变量sys给出的目录列表中搜索名为spam.py的文件。 .path。sys.path从这些位置初始化:

  • 包含输入脚本的目录(或当前目录)。
  • PYTHONPATH(目录名列表,语法与shell变量PATH相同)。
  • 依赖于安装的默认值。“