0

我是 Python 新手,我希望了解 Python 如何发现它从中导入的模块的路径。这相当于CLASSPATH在 Java 和PERL5LIBPerl 中。

例如,我正在查看的脚本中的导入块看起来像这样:

import os
import resource

from localnamespace.localmodule import some_class

我理解这一点os并且resource是 Python 原生的(是核心语言 API 的一部分),但解释器仍然必须有一些指针可以在哪里找到它们。至于localnamespace.localmodule,我们如何告诉解释器在哪里找到这个模块,因为这个脚本所在的目录没有名为localnamespace.

4

1 回答 1

1

TLDR

总之,搜索过程如下:

1)以前进口的sys.modules

2)如果没有,我可以在脚本/解释器目录中找到它吗?

3)如果没有,我可以在PYTHONPATH环境变量的任何目录中找到它吗?

4)如果没有,ImportError

更长的答案

参考文档,import首先查看sys.modules哪个是当前或最近加载的模块的字典。

它在那里找不到它搜索的模块sys.meta_path- 这里的实际路径因实现而异。通常,导入路径将在 中定义sys.path,这是一个目录列表,包括环境变量中的目录PYTHONPATH

的文档sys.path将自己描述为:

指定模块搜索路径的字符串列表。从环境变量 PYTHONPATH 初始化,加上依赖于安装的默认值。

在程序启动时初始化时,此列表的第一项 path[0] 是包含用于调用 Python 解释器的脚本的目录。如果脚本目录不可用(例如,如果交互调用解释器或从标准输入读取脚本),path[0] 是空字符串,它指示 Python 首先搜索当前目录中的模块。请注意,脚本目录是在 PYTHONPATH 插入的条目之前插入的。

于 2013-09-05T18:40:13.423 回答