什么';Python用于导入模块的顺序是什么?
我遇到了python导入语句的一些奇怪之处 假设我的文件结构如下所示:什么';Python用于导入模块的顺序是什么?,python,python-2.7,import,module,Python,Python 2.7,Import,Module,我遇到了python导入语句的一些奇怪之处 假设我的文件结构如下所示: foo\ __init__.py bar.py os.py bar.py中的代码(其他文件为空) 奇怪的是,当我运行python-mfoo.bar时,它会打印出来 foo/os.pyc /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc 但是,当我将direcotry更改为foo,并运行pyt
foo\
__init__.py
bar.py
os.py
bar.py中的代码(其他文件为空)
奇怪的是,当我运行python-mfoo.bar
时,它会打印出来
foo/os.pyc
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc
但是,当我将direcotry更改为foo
,并运行python-m bar
时,它会打印出来
foo/os.pyc
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc
我运行脚本的两种方式有什么区别?
总之,Python导入模块的顺序是什么?
从官方文件中,我找到了几个关于这个问题的文字(它们让我更加困惑)
解释器首先搜索具有该名称的内置模块。如果未找到,它将在变量sys.path给定的目录列表中搜索名为spam.py的文件
此列表的第一项路径[0]是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果以交互方式调用解释器或从标准输入读取脚本),则路径[0]是空字符串,它将指示Python首先搜索当前目录中的模块
事实上,这种引用非常常见,以至于import语句在查找标准模块搜索路径之前,首先查找包含包
如果在当前包(当前模块是其子模块的包)中找不到导入的模块,import语句将查找具有给定名称的顶级模块
我运行脚本的两种方式有什么区别
区别在于foo
是否(从python的角度)是一个已加载的模块
如果运行python-mfoo.bar
,foo
是一个有效的模块。即使使用Python2.7,导入操作系统
仍然是一个问题,因此,操作系统
根据包含的模块(即foo
)得到解决,首先:
:
子模块通常需要相互引用。例如,环绕声模块可能使用回声模块。事实上,这种引用非常常见,以至于import语句首先在包含包中查找,然后再查找标准模块搜索路径
运行python-m bar
时,bar
是顶级模块,即它没有包含模块。在这种情况下,import os
通过sys.path
进入
导入bla的默认模块搜索为
sys.path
并使用第一次成功导入困惑?绝对正确。[包含软件包]>内置模块>系统路径