我认为sys.path是所有Python模块搜索路径的完整列表。
但是,在我的Ubuntu机器上,'/usr/local/lib/python2.6/dist-packages/‘是我的几乎所有模块的位置,而且这条路径不在sys.path中。我仍然可以导入该路径上的任何模块。
编辑,不正确:即使我将sys.path设置为空列表,我仍然可以从该路径导入。
这些关于dist-packages路径的隐式知识从何而来?在这个隐式搜索路径组中,还有其他路径吗?
编辑:我的帖子的第二部分似乎不是真的。实际上,"sys.path = []“意味着我不能导入任何东西,甚至不能从我当前的工作目录中导入任何东西。我很抱歉。
发布于 2011-07-14 17:37:56
注意,在下面是中提到了与安装相关的默认设置。
6.1.2.模块搜索路径 导入名为
spam的模块时,解释器将在包含输入脚本的目录中搜索名为spam.py的文件,然后在环境变量PYTHONPATH指定的目录列表中搜索。这与shell变量PATH具有相同的语法,即目录名称的列表。如果没有设置PYTHONPATH,或者在那里找不到文件,搜索将在依赖于安装的默认路径中继续进行;在Unix上,这通常是.:/usr/local/lib/python。 实际上,模块是在变量sys.path给出的目录列表中搜索的,该变量从包含输入脚本(或当前目录)、PYTHONPATH和(安装相关的默认)的目录中初始化。这允许Python程序知道他们正在做什么来修改或替换模块搜索路径。请注意,因为包含正在运行的脚本的目录位于搜索路径上,所以脚本不具有与标准模块相同的名称很重要,否则Python将在导入该模块时尝试将脚本作为模块加载。这通常是一个错误。有关更多信息,请参见标准模块一节。
在我的Ubuntu框中编辑,/usr/local/lib/python2.6/dist-packages出现在sys.path中。如果我清除sys.path,然后尝试从上面的目录导入一个模块,那就不再起作用了。这表明解释器不知道该目录,并通过sys.path找到它。
当您进行实验时,编辑,确保您在sys.path会话开始时立即修改sys.path。如果您import X,然后清除sys.path,然后再次清除import X,即使X不再在sys.path上,后者也不会失败。
发布于 2011-07-14 17:38:09
模块搜索路径
实际上,模块是在变量sys.path给出的目录列表中搜索的,该目录是从包含输入脚本(或当前目录)、PYTHONPATH和依赖安装的默认设置的目录初始化的。
您正在运行与安装相关的默认设置。
有关安装相关搜索路径的更多信息
https://stackoverflow.com/questions/6697525
复制相似问题