我是Python新手,我希望了解Python如何发现从中导入的模块的路径。这相当于Java中的CLASSPATH
和Perl中的PERL5LIB
。
E.g。我正在查看的脚本中的导入块看起来像这样:
import os
import resource
from localnamespace.localmodule import some_class
我理解os
和resource
是Python原生的(是核心语言API的一部分),但解释器必须有一些指针才能找到它们。至于localnamespace.localmodule
,我们如何告诉解释器在哪里找到这个模块,因为这个脚本所在的目录没有名为localnamespace
的子目录。
答案 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结果插入的条目之前插入了脚本目录。