我可以想象之前已经回答了这个问题,但我找不到一个完全描述搜索过程的线程。如果我错了,请道歉。我
什么是完全 Python用于查找模块的搜索过程?什么路径被认为是以什么顺序? (例如sys.path
vs PYTHONPATH
定义,site-packages
等。)
我在下面复制了评论中提供的the link信息,但我有以下问题:
installation-dependent
默认是什么? virtualenv
或conda
已启用虚拟环境会怎样?当导入名为spam的模块时,解释器首先进行搜索 对于具有该名称的内置模块。如果没有找到,则搜索 对于由。给出的目录列表中名为spam.py的文件 变量sys.path。 sys.path从这些位置初始化:
- 包含输入脚本(或当前目录)的目录。
PYTHONPATH
(目录名列表,语法与shell变量PATH
相同)。- 依赖于安装的默认值。
初始化后,Python程序可以修改
sys.path
。该 包含正在运行的脚本的目录放在开头 搜索路径的位置,在标准库路径之前。这意味着 将加载该目录中的脚本而不是模块 库目录中的名称相同。这是一个错误,除非 打算替换。有关更多信息,请参见标准模块 信息。
答案 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.7
和lib/python2.7/site-packages
目录。但是,PYTHONPATH
,PYTHONHOME
和~/.local/lib/python2.7
之类的内容是全局的,因此所有conda环境都会使用它们(这就是为什么我个人建议不要使用它们,除非你真的知道你在做什么)。