我认为sys.path是Python模块的所有搜索路径的完整列表。
但是,在我的Ubuntu机器上,'/ usr / local / lib / python2.6 / did-package /'几乎是我所有模块的所在,而且该路径不在sys.path中。我仍然可以导入该路径上的任何模块。
编辑,不是:即使我将sys.path设置为空列表,我仍然可以从该路径导入。
这种对dist-packages路径的隐含知识来自何处?在这个隐含的搜索路径组中是否有任何其他路径,或者它是什么?
编辑:我的帖子的第二部分似乎不正确。实际上,“sys.path = []”,意味着我无法导入任何内容,甚至不能从我当前的工作目录中导入。我很抱歉。答案 0 :(得分:4)
请注意following中提及安装相关的默认:
<强> 6.1.2。模块搜索路径
导入名为
spam
的模块时,解释程序会搜索a 包含输入脚本和的目录中名为spam.py
的文件 然后在环境变量指定的目录列表中PYTHONPATH
。这与shell变量PATH
具有相同的语法 是,目录名列表。如果未设置PYTHONPATH
,或者未设置.:/usr/local/lib/python
在那里找不到文件,搜索继续在 依赖于安装的默认路径;在Unix上,这通常是sys.path
。实际上,模块是在由。给出的目录列表中搜索的 从包含的目录初始化的变量
PYTHONPATH
输入脚本(或当前目录),/usr/local/lib/python2.6/dist-packages
和 与安装相关的默认值。这允许Python程序知道 他们正在做什么来修改或替换模块搜索路径。注意 因为包含正在运行的脚本的目录位于 搜索路径,重要的是脚本不具有相同的名称 一个标准模块,或Python将尝试加载脚本作为 导入该模块时的模块。这通常是一个错误。 有关详细信息,请参阅标准模块一节。
修改在我的Ubuntu框中,sys.path
中存在sys.path
。如果我清除sys.path
然后尝试从上面的目录导入模块,则该模块不再有效。这表明解释器没有该目录的隐含知识,并通过sys.path
找到它。
编辑进行实验时,请确保在Python会话开始时修改import X
。如果您sys.path
,然后再次清除import X
,然后再清除X
,即使sys.path
上不再{{1}},后者也不会失败。
答案 1 :(得分:1)
实际上,模块是在由。给出的目录列表中搜索的 变量sys.path,它是从包含的目录初始化的 输入脚本(或当前目录),PYTHONPATH和 安装依赖的默认值。
您正在使用依赖于安装的默认设置。