我有一个关于python中import//from语句的问题。你知道吗
在我的视图.py文件(项目/应用程序)/视图.py)我有一句话:
from django.views.generic import TemplateView, ListView
为什么我要把“django”包括在那一行?为什么仅仅指定泛型文件所在的目录(视图)是不够的?这是我以前在许多纯python脚本中所做的工作—例如:
from random import foo
以及我现在的django网址.py文件。在那里,我有:
from app.views import view
为什么我不进一步指定它,比如第一个示例中的路径规范中包含了'django'?为什么我不用这样写:
from project.app.views import view
谢谢你!你知道吗
欢迎来到Python导入系统的疯狂世界!你知道吗
为了稍微扩展一下弗洛伊德的答案,您遇到了Python语言中最容易混淆的部分之一:相对导入和绝对导入。虽然您给出的导入示例在语法上很好,但它们隐藏了一些幕后发生的复杂情况。跑步时:
Python在PYTHONPATH中搜索一个名为django的包或模块(可以用
print(sys.path)
之类的东西看到)。它最终会在您安装的库中找到一个。类似地,运行时:它搜索那些相同的路径,而是在Python解释器当前执行的目录中找到项目包。但是,如果您安装了一个名为project的库,它怎么知道您实际上指的是哪一个呢?这通常是通过使用绝对导入来解决的,如果您打算像这样使用相对导入,则通过显式来解决。如果您想在示例中更精确一些,您可以指定要使用
.
将其相对导入当前模块,如下所示:您甚至可以在django tutorial中的示例中看到这一点。你知道吗
请参阅this classic answer了解更多详细信息。你知道吗
python脚本可以看到指向全局默认位置的某些路径,如
site-packages
或dist-packages
(您可以在python目录树中找到这些目录,random
和django
位于其中一个目录中),或者由环境变量PYTHONPATH
指定。通常,PYTHONPATH
包含您的项目目录(实际上,您可以在那里添加您想要的任何目录)。您的示例表明包django
以及apps
和random
位于这些路径中,而project
不在那里。在python中,包由包含__init__.py
文件的目录以及表示模块的一些其他文件表示。现在,您可以使用相对路径(如示例中所示)从这些位置的包导入模块。你知道吗相关问题 更多 >
编程相关推荐