Python 'from x import y' vs 'from .x import y'

3
有人能解释一下这两者之间的区别吗?
1. `from x import y` 2. `from .x import y`
看起来第一个会仅在`PYTHONPATH`中或当前工作目录中导入`x`,但我在文档https://docs.python.org/3/reference/import.html中没有看到任何关于这种语法的参考。

1
你正在查看导入机制的文档,而不是导入语句的文档。这就像在寻找油门踏板时查看汽车发动机的技术规格一样。你需要查看这些文档 - undefined
2个回答

1
Python有多种方式来查找和导入模块,详见导入文档中的查找器和加载器部分。查找器使用特定于发行版的目录、冻结模块、PYTHONPATH中的路径以及通常是脚本加载的目录。您可以获取sys.path中的路径列表以及sys.modules.keys()
在处理from x import y时,Python会检查是否已经导入了“x”,然后遍历查找器列表以查看哪个查找器为名为“x”的模块提供解决方案。接下来,它会检查“x”是否有一个名为“y”的变量。如果没有,它将尝试相对于它已经找到的“x”导入一个名为“y”的模块。
有关导入语法和语义的更多细节,请参见简单语句部分的导入语句子部分。
第二个例子仅适用于包中的模块。句点告诉我们在下降到命名包之前向上移动多远的包层次结构。一个句点表示当前模块目录,每个句点向下移动朝向基础。

谢谢。还有一件我不明白的事情是为什么from x import y大部分时候可以作为相对导入的替代,后来我找到了答案,原因是当你运行一个Python脚本时,PYTHONPATH会自动将当前工作目录添加进去。https://dev59.com/SGAf5IYBdhLWcg3woz9n - undefined
1
不完全正确。Python将脚本所在的目录添加到路径中,而不是您当前的工作目录。您的当前工作目录可以是任何地方,只要"x"在脚本的目录中,导入就会正常工作。例如,假设您将此目录放入系统PATH中,它仍然可以正常工作。我有点迂腐,但PYTHONPATH是一个环境变量,用于添加Python将扫描的路径。Python搜索路径列表包含该目录,但环境变量PYTHONPATH不包含。 - undefined

0

所有5.7节下的示例都有一个点前缀,我在那里没有看到任何对我的问题的答案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接