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" 设置。
对于上下文,我使用的是 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" 设置。