【问题标题】:Unexpected import behaviour in Python 3Python 3 中的意外导入行为
【发布时间】:2016-05-29 19:50:22
【问题描述】:

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

import rules

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

问题是在rules.py 文件中使用import rules 会导致文件“导入自身”而不是查看site-packages。所有关于 SO 的相关答案都指向使用绝对导入——但这仅与 Python 2.7 相关,而不是 Python 3.5(绝对导入现在是默认设置)。

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

【问题讨论】:

  • 您是否将django_rules 添加到您的INSTALLED_APPS 中?
  • @Kieran 你是对的,当我意识到这一点时我删除了我的评论:)
  • 我认为只有当您的 PYTHONPATH(可能设置在 Django 中)指向 应用程序相关的 rules.py 文件所在的应用程序目录时,才会发生这种情况。通常,与应用程序相关的rules.py 文件只能通过例如访问。 from app import rules 或类似名称,并且不会与 site-packages/rules.py(或 site-packages/rules/__init__.py,以相关者为准)发生冲突。因此,请仔细检查您的 PYTHONPATH 是否超出范围。
  • @Evert 我已经修好了。 Pycharm 正在将所有应用程序添加到我的 python 路径中。更改此行为解决了问题!请发布答案,以便我接受。
  • 实际上,您应该自己发布答案,因为这是一个不同的问题:PyCharm 需要调整。我的建议:1/ 更新您的问题,包括您正在使用 PyCharm 的事实(我总是假设人们使用最简单的文本编辑器和终端),以及 2/ 在您的回答中告诉我们您所做的更改在 PyCharm 中解决您的问题,以及为什么 PyCharm 将所有应用程序添加到您的 PYTHONPATH 中(这是默认设置吗?如果是这样,那么糟糕,糟糕的 PyCharm)。

标签: python django python-3.x import python-import


【解决方案1】:

这个问题是几个配置问题的结果。

  • 我已在 Pycharm 中将所有应用程序标记为源文件夹。
  • 我还在运行配置中选择了“将源根目录添加到 PYTHONPATH”。

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

为了解决这个问题,我取消了将我的应用程序标记为源文件夹并取消选中“将源根目录添加到 PYTHONPATH”设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 2017-10-06
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多