如何获取Python中的当前导入路径?
我在代码的某个地方遇到了一个ImportError
错误,但在应用程序启动时同一个模块可以正常导入。我想知道Python在导入模块时会查找哪些路径,这样我就能追踪到这个问题的原因。我发现了这个:
print sys.path
这是系统在尝试导入模块时查找的所有路径的列表吗?
4 个回答
5
其他的回答几乎是正确的。
在Python 3中:
import sys
import_paths = sys.path
在Python 2.7中:
import sys
import os
import copy
import_paths = copy.copy(sys.path)
if '__file__' in vars(): import_paths.append(os.path.abspath(os.path.join(__file__,'..')))
在这两个版本中,主要的文件(也就是当__name__ == '__main'
为True
时)会自动把它自己的目录添加到sys.path中。但是在Python 3中,只会从sys.path
中导入模块。而在Python 2.7中,模块可以从sys.path
和当前文件所在的目录中导入。这在你有这样的文件结构时很重要:
|-- start.py
|-- first_import
| |-- __init__.py
| |-- second_import.py
内容如下:
start.py:
import first_import
__init__.py:
import second_import.py
在Python 3中,直接运行__init__.py是可以的,但当你运行start.py时,__init__.py就无法import second_import.py
,因为它不在sys.path
里。
而在Python 2.7中,当你运行start.py时,__init__.py就能import second_import.py
,即使它不在sys.path
中,因为它和__init__.py在同一个文件夹里。
我想不出一个办法可以完美地在Python 3中复制Python 2.7的行为,真是遗憾。
13
如果你想让格式看起来更好一些:
import sys
from pprint import pprint
pprint(sys.path)
97
Python默认会检查一些特定的路径来寻找模块,你可以通过查看 sys.path
来了解这些路径。
import sys
print(sys.path)