Python 3 中的意外导入行为

Unexpected import behaviour in Python 3

对于上下文,我使用的是 django-rules 包。访问方式如下:

import rules

此包需要在每个名为 rules.py 的应用程序目录中创建一个文件,以便自动发现这些文件。

问题是在 rules.py 文件中使用 import rules 会导致文件 "import itself" 而不是在 site-packages 中查找。 SO 上的所有相关答案都指向使用绝对导入 - 但这仅适用于 Python 2.7,而不适用于 Python 3.5(绝对导入现在是默认值)。

我怀疑这可能与 sys.path 中目录的顺序有关,但我不确定如何解决该问题。还有其他人遇到过这个问题吗?

这个问题是由几个配置问题引起的。

  • 我在 Pycharm 中将所有应用程序标记为源文件夹。
  • 我还在 运行 配置中选择了 "Add source roots to PYTHONPATH"。

因此,可以将 rules.py 简称为 rules,而不是 appname.rules。这导致了意外行为。

为了解决这个问题,我取消了将我的应用程序标记为源文件夹并取消勾选 "Add source roots to PYTHONPATH" 设置。