65

ImportError我在代码的某处遇到异常,但可以在应用程序启动时安全地导入相同的模块。我很想知道 Python 查找要导入的模块的路径,以便我可以追踪为什么会出现这个问题。我找到了这个:

print sys.path

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

4

4 回答 4

83

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

import sys
print(sys.path)
于 2011-04-22T00:55:11.797 回答
9

如果你想要更好的格式:

import sys

from pprint import pprint

pprint(sys.path)
于 2015-11-06T15:13:20.153 回答
2

其他答案几乎是正确的

蟒蛇 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'is True)会自动将其自己的目录添加到 sys.path。然而Python 3 只从sys.path. Python 2.7 从两个sys.pathAND 从当前文件的目录中导入模块。当您具有以下文件结构时,这是相关的:

|-- 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因为它与它在同一个文件夹中。

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

于 2019-01-08T22:42:10.783 回答
0

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

于 2017-12-11T03:45:15.797 回答