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

Posted

技术标签:

【中文标题】尽管尝试了多个建议,但无法在 Python 中导入本地模块【英文标题】:Cannot import local module in Python despite trying multiple suggestions 【发布时间】:2018-08-04 21:38:06 【问题描述】:

我已经阅读了大约十篇关于如何导入本地模块的帖子,但我仍然不明白为什么这不起作用。我有一个非常简单的模块,actor.py,里面只有一个类:

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

所以我再次搜索,this 帖子告诉我删除“演员”中的点,但如前所述,我也尝试过。我的最终猜测是

from . import actor

但这会产生

ImportError: cannot import name 'actor'

我关注here,但那里的答案提到了循环依赖,我敢肯定演员和刮刀没有。我可能没有正确编写我的模块吗?我想不出任何其他方法来编写导入语句。

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

【问题讨论】:

你想如何运行它? '__main__' is not a package 表明您的执行方式存在问题。 应该是:from actor import Actor,您从同一目录中的文件导入类。 @avigil 我在 scraper.py 中运行 main 方法。 所以python -m WebScraper.scraper?如果它是模块的一部分,则不能使用 python scraper.py 直接调用它。 或者如果你在 IntelliJ 中运行,这是你的 IDE 运行配置的问题,而不是代码本身。 【参考方案1】:

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

相对导入对您不起作用,因为您试图将模块作为脚本运行。您可以在 https://***.com/a/8300343/7088038 看到对正在发生的事情的解释。如果您希望相对导入起作用,您必须将__main__.py 文件添加到您的模块以使其可运行,或者从使用绝对导入的外部脚本执行,这样您就不会破坏包命名空间。

另一种风格说明 - 通常(但不总是)python 中的包名称使用全小写名称。 CamelCase 保留用于类名。因此,如果您想遵循约定,您可以调用您的包webscraper 并使用from webscraper.actor import Actor

【讨论】:

【参考方案2】:

要将类导入脚本,请使用:

from actor import Actor

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

from actor import *

【讨论】:

如果你浏览我的帖子,你会发现我已经尝试过了,但没有成功 我确实看到了,但我尝试了它并且它有效。我错过了什么吗? 如果我执行“从 actor 导入 Actor”,它会告诉我 actor 是一个未解析的引用,因此仅此一项不是解决方案 我会在我的原始帖子中说明它不起作用的原因 可能用于在类定义中使用(Object)。 python3 中的新语法消除了这一点。

以上是关于尽管尝试了多个建议,但无法在 Python 中导入本地模块的主要内容,如果未能解决你的问题,请参考以下文章

cx_Oracle 无法在 Python 3.9 中导入,尽管一切都已正确路径并且所有必需的部分都在 64 位上运行

为什么我不能在我的Jupyter Notebook(Python 3.6)中导入utils,尽管它已经安装了?

无法在 Swift XMPP 客户端中导入客户端证书

如何在 Pandas Dataframe 中导入多个 excel 文件

Python:安装了 Anaconda,但无法在 Jupyter 笔记本中导入 numpy 或 matplotlib

无法在 Eclipse 中导入 Maven 依赖项?尝试了一切