Python中的“from [dot]package import ...”语法

114

在学习 Django 教程时,我看到了以下语法:

from .models import Recipe, Ingredient, Instruction

有人可以解释一下.models是如何工作/它确切的作用是什么吗?通常我有:

from myapp.models import

如果在 .models 前面没有 myapp 部分,它是如何工作的?

2个回答

150

. 是一个快捷方式,用于告诉 Python 先在当前包中搜索,然后再搜索其余的 PYTHONPATH。因此,如果名称相同的模块 Recipe 存在于 PYTHONPATH 的其他位置,它将不会被加载。


10
@Hack-R - 两个点代表父目录。 - Bhindi
@Bhindi 哦,谢谢!我简直不敢相信我没有意识到那个。 - Hack-R
10
Python首先检查当前目录,那么"."的用处是什么? - ns15
8
@shadow0359 "当前"目录并不总是脚本所在的目录。该脚本可能被导入到位于其他目录中的另一个脚本中。 - Aswin
1
这些被称为相对导入。在此处可以查看完整的官方解释:https://www.python.org/dev/peps/pep-0328/#guido-s-decision,以及其他答案:https://dev59.com/Gmw05IYBdhLWcg3wXQwh#7279834。 - Gabriel Staples

1
除了Sudeep Juvekar之外,这个问题也与manage.py的行为有关。
django-admin.py和manage.py中:
它将你的项目包放在sys.path上。

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