【问题标题】:Path Search in PythonPython中的路径搜索
【发布时间】:2014-09-16 17:55:55
【问题描述】:

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

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

我从the link下面复制了cmets中提供的信息,如下,但我有以下问题:

  • installation-dependent 默认值到底是什么?
  • 如果您激活了来自virtualenvconda 的虚拟环境会怎样?

当一个名为 spam 的模块被导入时,解释器首先搜索 对于具有该名称的内置模块。如果没有找到,然后搜索 对于一个名为 spam.py 的文件,在由 变量 sys.path。 sys.path 从这些位置初始化:

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

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

【问题讨论】:

  • 来自this question,我发现this link可能对你有帮助。
  • 感谢@Celeo 我已经更新了 OP。
  • 几年前有一个good video 介绍如何从 pycon 导入。

标签: python path virtualenv conda


【解决方案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.

【讨论】:

  • 感谢@Donkyhotay +1。我已根据该答案使用该信息和问题更新了 OP。
【解决方案2】:

我相信您正在寻找的文档是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 环境都会使用它们(这就是为什么我个人建议不要使用它们,除非你真的知道自己在做什么)。

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2011-03-26
    • 2013-11-07
    相关资源
    最近更新 更多