当前位置: 首页 > 知识库问答 >
问题:

即使使用__init__.py,如何修复“试图在非包中进行相对导入”

严亮
2023-03-14

我试图遵循PEP 328,目录结构如下:

pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py

core_test.py中,我有以下导入语句

from ..components.core import GameLoopEvents
tests$ python core_test.py 
Traceback (most recent call last):
  File "core_test.py", line 3, in <module>
    from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package

我有什么遗漏吗?

共有1个答案

宰父才
2023-03-14

详细阐述伊格纳西奥·巴斯克斯-艾布拉姆斯的回答:

Python导入机制相对于当前文件的__name__工作。当您直接执行一个文件时,它没有其通常的名称,而是以“__main__”作为其名称。所以相对进口不起作用。

按照Igancio的建议,您可以使用-m选项执行它。如果您的包中有一部分要作为脚本运行,您还可以使用__package__属性告诉该文件在包层次结构中应该有什么名称。

详情见http://www.python.org/dev/peps/pep-0366/。

 类似资料:
  • 问题内容: 我正在尝试使用以下目录结构来遵循PEP 328: 在我有以下进口声明 但是,当我运行时,出现以下错误: 到处搜索时,我发现“ 即使使用,相对路径也无法使用 ”和“ 从相对路径导入模块 ”,但是它们没有帮助。 我在这里想念什么吗? 问题答案: 是。你没有将其用作包装。

  • 我在configs/common中使用配置simulation.py。我知道错误了 完整错误: py:

  • 问题内容: 我知道栈上有很多类似的问题。但是常见的答案似乎并不适合我。 我有这样的文件结构 我发现如果我在test.py中包含代码 要么 我将能够引用目录中的模块。但这没有用。 所以我尝试添加到路径,它正确添加了它: 但是即使是现在,当我尝试上述导入语句时,我仍然收到错误消息 要么 有什么明显的我想念的吗? 有没有办法检查我是否正确配置了文件,或查看我的程序包层次结构? 问题答案: 您需要更新,这

  • 我有一个结构如下的项目: 我需要使用我在导入的文件中的第一个赋值中实现的函数,如下所示: 目前,我正在PyCharm中编程,IDE没有显示任何警告或问题。它甚至自动完成上面的代码。尽管如此,当我想运行<code>new_file时。py在命令行中抛出以下错误:

  • 问题内容: 我在理解项目中python文件的使用场景或设计目标时遇到了困难。 假设我有“模型”目录(称为包),其中包含以下文件 我发现了两种使用方法: 我有需要使用一个共同的定义,,。我可以用作所有* model.py类的基础/通用定义吗?这意味着我必须导入。 或者,应当具有自己导入的solrmodel.py,mongomodel.py,samodel.py的定义,并且它允许像这样的类或函数的轻松

  • 问题内容: 我正在学习Python,但无法弄清楚导入的工作方式。 我从Python教程中了解到该文件初始化了一个程序包,并且可以在此处导入子程序包。 不过,我做错了。您能为我(以及将来的Python学习者)解释我做错了什么吗? 这是我正在尝试做的一个简化示例。 这是我的文件结构: 内容: 是空的。 包含: 最后,包含: 这就是我尝试使用OSX终端和Python 3运行hello_world.py的