Python路径查找要导入的模块/类

时间:2013-09-05 14:53:39

标签: python path

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

E.g。我正在查看的脚本中的导入块看起来像这样:

import os
import resource

from localnamespace.localmodule import some_class

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

1 个答案:

答案 0 :(得分: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解释器的脚本的目录。如果脚本目录不可用(例如,如果以交互方式调用解释器或者从标准输入读取脚本),则路径[0]为空字符串,它指示Python首先搜索当前目录中的模块。请注意,在作为PYTHONPATH结果插入的条目之前插入了脚本目录。