擅长:python、mysql、java
<p>欢迎来到Python导入系统的疯狂世界!你知道吗</p>
<p>为了稍微扩展一下弗洛伊德的答案,您遇到了Python语言中最容易混淆的部分之一:相对导入和绝对导入。虽然您给出的导入示例在语法上很好,但它们隐藏了一些幕后发生的复杂情况。跑步时:</p>
<pre><code>from django.views.generic import TemplateView, ListView
</code></pre>
<p>Python在PYTHONPATH中搜索一个名为<em>django</em>的包或模块(可以用<code>print(sys.path)</code>之类的东西看到)。它最终会在您安装的库中找到一个。类似地,运行时:</p>
<pre><code>from project.app.views import view
</code></pre>
<p>它搜索那些<em>相同的路径</em>,而是在Python解释器当前执行的目录中找到<em>项目</em>包。但是,如果您安装了一个名为<em>project</em>的库,它怎么知道您实际上指的是哪一个呢?这通常是通过使用<em>绝对</em>导入来解决的,如果您打算像这样使用<em>相对</em>导入,则通过显式来解决。如果您想在示例中更精确一些,您可以指定要使用<code>.</code>将其相对导入当前模块,如下所示:</p>
<pre><code>from .project.app.views import view
</code></pre>
<p>您甚至可以在<a href="https://docs.djangoproject.com/en/2.0/intro/tutorial01/" rel="nofollow noreferrer">django tutorial</a>中的示例中看到这一点。你知道吗</p>
<p>请参阅<a href="https://stackoverflow.com/questions/14132789/relative-imports-for-the-billionth-time#14132912">this classic answer</a>了解更多详细信息。你知道吗</p>