2014-12-03 26 views
5

我在同一个目录中的两个文件,并在任何地方没有__init__.py文件:这个Python导入如何工作?

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

+0

我会哈扎德猜测,如PHP,Python的将评估多个位置查找文件,包括当前的工作目录? – 2014-12-03 15:55:21

+0

当前工作目录是'测试\ B' ... – thebjorn 2014-12-03 15:57:38

+0

该脚本运行从一个,但是,原谅我缺乏Python的知识,但PHP和我相信大多数语言会同样对待这种情况,当你键入..这只是改变该脚本的工作目录 – 2014-12-03 15:59:55

回答

8

module docs(重点煤矿)引述:

“当一个名为垃圾邮件导入模块,用于解释首先搜索内置有该名称模块如果没有找到,则查找一个。文件名为spam.py由变量给定的sys.path目录的列表的sys.path从这些位置初始化:。

  • 包含输入脚本(或当前目录)的目录
  • PYTHONPATH(清单目录名,与shell变量PATH语法相同)。
  • 安装相关的默认。”
+0

啊,我感到困惑,因为我没有在'sys.path'中的任何地方看到'test \ a \ a'的引用(它以'['','c:\\ python27 \\ lib开始。 ')。 – thebjorn 2014-12-03 16:07:54

+0

@thebjorn:''''指代ofrommel的答案的粗体部分。参见['sys.path'](https://docs.python.org/3/library/sys.html#sys.path)。 – Kevin 2014-12-03 17:06:32