尽管尝试了多个建议,但无法在 Python 中导入本地模块

Cannot import local module in Python despite trying multiple suggestions

我已经通读了大约 10 post 篇关于如何导入本地模块的文章,但我仍然对为什么这不起作用感到困惑。我有一个非常简单的模块,actor.py,里面只有一个 class:

class Actor(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

我正在尝试将其导入同一目录中的另一个模块 scraper.py:

一些修复程序将没有 init.py 列为本地导入的问题,所以我知道这不是我的问题。 最初我试过这些:

import actor

from actor import Actor

但它告诉我 actor 和 Actor 是未解析的引用。 here 告诉我那是 Python 2 语法,我正在使用 Python 3。那个答案反而建议我这样做:

from .actor import Actor

当我 运行 使用该语法的程序时,出现此错误:

ModuleNotFoundError: No module named '__main__.actor'; '__main__' is not a package

所以我再次搜索, post 告诉我从 'actor,' 中删除点,但如前所述,我也试过了。我最后的猜测是

from . import actor

但这会产生

ImportError: cannot import name 'actor'

我遵循 here,但那里的答案提到了循环依赖,我确定 actor 和 scraper 有 none。我可能没有正确编写我的模块吗?我想不出任何其他方式来编写导入语句。

编辑:如果有帮助的话,我正在使用 Intellij

要将 class 导入您的脚本,请使用:

from actor import Actor

或者将 .py 完全导入(包括其中包含的任何导入)到命名空间中使用:

from actor import *

尝试from WebScraper.actor import Actor。如果这不起作用,那是因为您的包目录不在 PYTHONPATH 中。您可以在 IntelliJ Python run configuration.

中设置

相对导入对您不起作用,因为您正试图 运行 将模块作为脚本。您可以在 看到对正在发生的事情的解释。如果你想让相对导入工作,你必须添加一个 __main__.py 文件到你的模块以允许它 运行nable,或者从一个你使用绝对导入的外部脚本执行,这样你就不会'破坏包命名空间。

另一个文体注释- 通常(但不总是)python 中的包名称使用所有小写名称。 CamelCase 保留用于 class 个名称。因此,如果您想遵循约定,您可以调用您的包 webscraper 并使用 from webscraper.actor import Actor