【问题标题】:Python Relative Imports and PackagesPython 相对导入和包
【发布时间】:2014-12-02 00:03:39
【问题描述】:

我正在尝试创建一个包,我的树结构如下所示:

dionesus/
  setup.py
  dionesus/
    __init__.py
    dionesus.py

Dionesus.py 有一个名为 Dionesus 的类。 init.py 为空。

如何在不指定顶级文件夹的情况下导入 Dionesus 类?

我必须做的:

import dionesus
d = dionesus.dionesus.Dionesus()

我希望导入语句看起来像:

import dionesus
d = dionesus.Dionesus()

【问题讨论】:

  • 以后,如果您在询问有关包、相对导入或其他 Python 版本之间存在显着差异的问题时,请列出您关心的版本号。在这种情况下,除了如果你搞砸了你会得到的错误/不正确的行为,一切都应该从 2.5 开始(IIRC),但除非你已经知道答案,否则你不会提前知道。跨度>

标签: python import packages


【解决方案1】:

首先,您仍然可以使用绝对导入,只需使用from … import 形式:

from dionesus import dionesus
d = dionesus.Dionesus()

如果您需要在同一个模块中同时导入 dionesus 和 dionesus.dionesus,这显然会出现问题,但这几乎隐含在希望给它们都赋予相同的非歧义名称的愿望中......

或者,如果您是 dionesus.dionesus 的父母或兄弟姐妹或其他亲属,则可以使用相对导入。根据您所在的位置,情况会有所不同(毕竟,这就是相对的含义);您可能从..dionesus.. 等导入。但无论在哪里,它都与上面的from … import 形式相同,只是使用相对名称而不是绝对名称。 (事实上​​,相对导入总是使用from 形式。)

from . import dionesus
d = dionesus.Dionesus()

【讨论】:

  • 很抱歉给您带来了困惑。更正了错字。该文件应该是 dionesus.py,其中包含一个名为 Dionesus 的类。
  • @J.W.:好的,删除了最后的注释。
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 2021-04-05
  • 2016-12-03
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2013-09-16
相关资源
最近更新 更多