1

我想这之前已经回答过了,但我找不到一个准确描述搜索过程的线程。抱歉,如果我错了。我

Python 查找模块所遵循的搜索过程到底是什么?以什么顺序考虑哪些路径?(例如sys.pathPYTHONPATH定义site-packages等)

我从评论中提供的链接中复制了以下信息,如下,但我有以下问题:

  • installation-dependent默认到底是什么?
  • 如果您有一个来自virtualenv或来自conda激活的虚拟环境,会发生什么?

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

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

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

4

2 回答 2

1

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

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

于 2014-09-17T15:53:51.417 回答
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.
于 2014-09-16T18:01:10.467 回答