【发布时间】:2015-10-29 05:23:56
【问题描述】:
我遇到了关于 python 导入语句的一些奇怪的事情。
假设我的文件结构如下:
foo\
__init__.py
bar.py
os.py
bar.py 中的代码(其他文件为空)
import os
print os.__file__
奇怪的是,当我运行 python -m foo.bar 时,它会打印出来
foo/os.pyc
但是,当我将目录更改为 foo 并运行 python -m bar 时,它会打印出来
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc
我运行脚本的两种方式有什么区别?
一句话,Python 导入模块的顺序是什么?
从官方文档中,我找到了几个关于这个问题的文字(他们让我更加困惑)
解释器首先搜索具有该名称的内置模块。如果没有找到,它会在由变量 sys.path 给出的目录列表中搜索名为 spam.py 的文件。
此列表的第一项路径 [0] 是包含用于调用 Python 解释器的脚本的目录。如果脚本目录不可用(例如,如果交互调用解释器或从标准输入读取脚本),path[0] 是空字符串,它指示 Python 首先搜索当前目录中的模块。
事实上,此类引用非常普遍,以至于 import 语句首先在 包含包 中查找,然后再查找 标准模块 搜索路径。
...
如果在当前包(当前模块是其子模块的包)中找不到导入的模块,则导入语句会查找具有给定名称的顶级模块。
【问题讨论】:
标签: python python-2.7 import module