查找是按照 sys.path 中的路径挨个扫描。若都不存在则提示error。
sys.path路径第一个是当前运行脚本所在的目录,其后是PYTHONPATH(通常若步专门设置则为空)设置的目录,在后面是全局包所在目录。python
PS:一个目录要有__init__.py才能做为包被导入git
要导入的包在当前目录
要导入的包在子目录
要导入的包在父目录
要导入的包在兄目录(这种状况和包在其余十万八千里地方同样)github
如下是目录结构
app
如下示例的运行目录都是test_module/sub1
即 python case_.pycode
要导入的模块和当前运行文件在同一目录,直接import
a.pyblog
print("I'm a.py")
case_1.pyutf-8
#!/usr/bin/env python # encoding: utf-8 import a print('I\'m case_1.py')
输出:get
I'm sub1/a.py I'm case_1.py
子目录创建__init__.py 文件,import subsub.ait
case2ast
#!/usr/bin/env python # encoding: utf-8 import subsub.a print('I\'m case_2.py')
输出
I'm subsub/aa.py I'm case_2.py
两个方法,其一直接改变sys.path内容,使用sys.path.append(),注意这里添加的路径是对于运行该文件时的当前目录来讲的;其二设置PYTHONPATH添加父目录
case_3_1.py
#!/usr/bin/env python # encoding: utf-8 import sys sys.path.append('../') import aa print('I\'m case_3_1.py')
执行case_3_2前 先使用这个命令 export PYTHONPATH=$PYTHONPATH:/home/pb/test_module
case_3_2.py
#!/usr/bin/env python # encoding: utf-8 import aa print('I\'m case_3_2.py')
和第三种同样,使用sys.path.append()或者设置PYTHONPATH添加父目录
#!/usr/bin/env python # encoding: utf-8 import sys sys.path.append('../') import sub2.aa print('I\'m case_4.py')
其实掌握了sys.path 和PYTHONPATH后目录在哪里都能用这样的stopgap方法搞一下,可是若是是第四种状况仍是建议使用virtualenv吧,否则你之后会发疯的。