Python中的路径搜索

时间:2014-09-16 17:55:55

标签: python path virtualenv conda

我可以想象之前已经回答了这个问题,但我找不到一个完全描述搜索过程的线程。如果我错了,请道歉。我

什么是完全 Python用于查找模块的搜索过程?什么路径被认为是以什么顺序? (例如sys.path vs PYTHONPATH定义,site-packages等。)

我在下面复制了评论中提供的the link信息,但我有以下问题:

  • installation-dependent默认是什么?
  • 如果您的virtualenvconda已启用虚拟环境会怎样?
  

当导入名为spam的模块时,解释器首先进行搜索   对于具有该名称的内置模块。如果没有找到,则搜索   对于由。给出的目录列表中名为spam.py的文件   变量sys.path。 sys.path从这些位置初始化:

     
      
  • 包含输入脚本(或当前目录)的目录。
  •   
  • PYTHONPATH(目录名列表,语法与shell变量PATH相同)。
  •   
  • 依赖于安装的默认值。
  •   
     

初始化后,Python程序可以修改sys.path。该   包含正在运行的脚本的目录放在开头   搜索路径的位置,在标准库路径之前。这意味着   将加载该目录中的脚本而不是模块   库目录中的名称相同。这是一个错误,除非   打算替换。有关更多信息,请参见标准模块   信息。

2 个答案:

答案 0 :(得分:1)

你要找的答案在这里:https://docs.python.org/2/tutorial/modules.html在第6.1.2节。

根据网站显示

the directory containing the input script (or the current directory).
PYTHONPATH (a list of directory names, with the same syntax as the shell variable PATH).
the installation-dependent default.

答案 1 :(得分:1)

我相信您要查找的文档是https://docs.python.org/2/library/site.html。请注意,需要注意的另外两件事是.pth文件和用户站点目录(~/.local/lib/python2.7)。

我不知道virtualenv是如何运作的。 Conda环境应该被认为是Python的独立安装,因此它们有自己独立的lib/python2.7lib/python2.7/site-packages目录。但是,PYTHONPATHPYTHONHOME~/.local/lib/python2.7之类的内容是全局的,因此所有conda环境都会使用它们(这就是为什么我个人建议不要使用它们,除非你真的知道你在做什么)。