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

Posted

技术标签:

【中文标题】如何在 Python 中获取当前的导入路径?【英文标题】:How to get current import paths in Python? 【发布时间】:2011-08-10 17:06:37 【问题描述】:

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

print sys.path

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

【问题讨论】:

docs.python.org/library/sys.html#sys.path 似乎很有定论。为什么要问? 【参考方案1】:

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

import sys
print(sys.path)

【讨论】:

这是系统在尝试导入模块时查看的所有路径的列表吗? 是的。 Python 标准库模块文档中的更多详细信息docs.python.org/tutorial/modules.html#the-module-search-path【参考方案2】:

其他答案几乎正确

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

如果你想要更好的格式:

import sys

from pprint import pprint

pprint(sys.path)

【讨论】:

以上是关于如何在 Python 中获取当前的导入路径?的主要内容,如果未能解决你的问题,请参考以下文章

Python获取当前脚本文件夹(Script)的绝对路径

python获取当前路径

如何获得当前Java文件的路径

python 获取文件夹路径问题

python 如何退回上级路径

python 如何获取一个文件夹内包括子文件夹所有文件的名字和路径