如何在Python中获取当前导入路径?

时间:2011-04-22 00:49:57

标签: python import importerror

我在代码中的某处出现ImportError异常,但可以在应用程序启动时安全地导入相同的模块。我很想知道Python寻找要导入的模块的路径,以便我可以追踪出现此问题的原因。我发现了这个:

print sys.path

这是系统在尝试导入模块时查找的所有路径的列表吗?

4 个答案:

答案 0 :(得分:52)

通过选中sys.path可以检查python默认检查的路径位置。

import sys
print(sys.path)

答案 1 :(得分:5)

如果你想要更好的格式化:

import sys

from pprint import pprint

pprint(sys.path)

答案 2 :(得分:0)

Sys.path是Python查找导入时所查看的所有路径的列表。如果要向包含一个或多个python文件的目录添加另一个路径,可以使用:sys.path.append('path/to/directory')

答案 3 :(得分:0)

其他答案几乎是正确

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不在# define FILL_ARRAY(arr, data, len) for (size_t i = 0; i < len; i++) { arr[i] = data } 中,因为它与它在同一文件夹中。

不幸的是,我想不出一种方法来完美复制Python 2.7在Python 3中的行为。