Python - 是否有比sys.path更多的搜索路径?

时间:2011-07-14 17:35:53

标签: python sys.path module-search-path

我认为sys.path是Python模块的所有搜索路径的完整列表。

但是,在我的Ubuntu机器上,'/ usr / local / lib / python2.6 / did-package /'几乎是我所有模块的所在,而且该路径不在sys.path中。我仍然可以导入该路径上的任何模块。

编辑,不是:即使我将sys.path设置为空列表,我仍然可以从该路径导入。

这种对dist-packages路径的隐含知识来自何处?在这个隐含的搜索路径组中是否有任何其他路径,或者它是什么?

编辑:我的帖子的第二部分似乎不正确。实际上,“sys.path = []”,意味着我无法导入任何内容,甚至不能从我当前的工作目录中导入。我很抱歉。

2 个答案:

答案 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)

Module Search Path

  

实际上,模块是在由。给出的目录列表中搜索的   变量sys.path,它是从包含的目录初始化的   输入脚本(或当前目录),PYTHONPATH和   安装依赖的默认值。

您正在使用依赖于安装的默认设置。

More Information on installation-dependent search paths