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

发布于 2024-11-02 12:35:02 字数 187 浏览 4 评论 0原文

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

print sys.path

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

I get an ImportError exception somewhere in the code, but the same module can be imported safely at startup of the application. I'm curious to see which paths Python looks for modules to import, so that I can trace why this problem occurs. I found this:

print sys.path

Is this the list of ALL paths that system looks when tries to import a module?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

两个我 2024-11-09 12:35:02

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

import sys
print(sys.path)

The path locations that python checks by default can be inspected by checking sys.path.

import sys
print(sys.path)
心碎的声音 2024-11-09 12:35:02

如果您想要更好的格式:

import sys

from pprint import pprint

pprint(sys.path)

If you want a bit better formatting:

import sys

from pprint import pprint

pprint(sys.path)
仅冇旳回忆 2024-11-09 12:35:02

其他答案几乎正确

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

带有内容
开始.py:
导入first_import
__init__.py:
import secondary_import.py

在 Python 3 中,直接运行 __init__.py 是可以的,但是当你运行 start.py 时,__init__.py 将无法 import secondary_import.py 因为它不会位于 sys.path 中。

在 Python 2.7 中,当您运行 start.py 时,__init__.py 将能够导入 secondary_import.py,即使它不在 sys.path 中,因为它位于同一文件夹中作为它。

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

The other answers are almost correct

Python 3:

import sys
import_paths = sys.path

In 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__,'..')))

In both versions the main file (i.e. __name__ == '__main' is True) automatically adds its own directory to sys.path. However Python 3 only imports modules from sys.path. Python 2.7 imports modules from both sys.path AND from the directory of the current file. This is relevant when you have a file structure like:

|-- start.py
|-- first_import
|   |-- __init__.py
|   |-- second_import.py

with contents
start.py:
import first_import
__init__.py:
import second_import.py

In Python 3 directly running __init__.py will work, but when you run start.py, __init__.py wont be able to import second_import.py because it wont be in sys.path.

In Python 2.7 when you run start.py, __init__.py will be able to import second_import.py even though its not in sys.path since it is in the same folder as it.

I cant think of a way to perfectly duplicate Python 2.7's behavior in Python 3 unfortunately.

神爱温柔 2024-11-09 12:35:02

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

Sys.path is a list of all the paths Python looks through when finding imports. If you want to add another path to a directory containing one or more python files, you can use: sys.path.append('path/to/directory').

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文