TLDR;如果程序包位于同一目录中,则它们优先于相同名称的模块。
从文档:
“当spam
导入一个名为的模块时,解释器会spam.py
在当前目录中搜索一个文件,然后在环境变量指定的目录列表中搜索PYTHONPATH
。这具有与shell变量PATH相同的语法,即目录名称。”
这有点误导,因为解释器还会寻找一个名为的包spam
(一个spam
包含__init__.py
文件的目录)。由于目录条目是在搜索之前进行排序的,因此,如果程序包位于同一目录中,则它们优先于具有相同名称的模块,因为它们位于spam
之前spam.py
。
请注意,“当前目录”是相对于主脚本路径(where __name__ == '__main__' is True
)。因此,如果您正在/home/billg
通话/foo/bar.py
,则“当前目录”是指/foo
。