【问题标题】:How to import a file_A from package Foo into file_X in package Bar, whereby file_A imports file_B also contained in the parent package Foo如何将包 Foo 中的 file_A 导入包 Bar 中的 file_X,其中 file_A 导入也包含在父包 Foo 中的 file_B
【发布时间】:2020-01-16 22:34:57
【问题描述】:

所以 Foo 包中的 file_A 导入了 Foo 中的 file_B。

在Package Bar中,有一个file_X,在file_X中我要导入file_A。我可以将file_B很好地导入file_X,并且file_A可以在运行file_A时很好地导入file_B,但是,我不能终生将file_A导入file_X,因为它给了我这个错误:

Traceback (most recent call last):
  File "PycharmProjects/Bar/file_X.py", line 1, in <module>
    import Foo.file_A
  File "PycharmProjects/Foo/file_A.py", line 1, in <module>
    import file_B
ModuleNotFoundError: No module named 'file_B'

这是显示我的文件结构的图像。

我认为一个好的解决方案可能是在其父包的 init 文件中导入文件 file_A 和 file_B。我认为通过这样做,python现在可以访问这两个文件,因此它不仅可以导入file_A,还可以从file_X导入file_A中的file_B。但是,我得到了完全相同的错误。

实际上有一种方法可以解决这个问题,但我非常不屑一顾,那就是将file_B作为Foo.file_B导入A,而不仅仅是File_B。然而,当在 Foo 包本身中工作时,这会极大地扰乱命名和工作流程。

如果有人可以为我认为是 hack 提供更好的解决方案,我将永远感激不尽。

【问题讨论】:

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


    【解决方案1】:

    使用绝对导入。

    要绕过Foo.file_B,请使用:

    from Foo import file_B

    你也应该可以使用:

    import Foo.file_B as file_b

    【讨论】:

    • 你好 Markez。你的意思是在file_A中使用from Foo import file_B吗,如果是这样,它实际上只是同一件事,但格式不同。事实上,它只是更长,因为现在你还需要写“来自”。我在 Foo 的 init 和 file_X 中对其进行了测试,但我只得到了同样的错误。不过还是谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2012-08-21
    • 2011-07-21
    • 2012-10-24
    • 2010-09-30
    相关资源
    最近更新 更多