2

我一直在使用 PyCharm 开发一个子模块以放入其他几个项目中。我有一个包含单元测试的 Tests 目录,我想从 PyCharm 运行它们,但是当我测试任何包含相对导入的代码时,我得到:

“ValueError:尝试相对导入超出顶级包”

我的结构大致是:

A
    ____init____.py
    ...
B
    ____init____.py
    ...
测试
    ____init____.py
    ...

我在 B 模块中测试使用相对导入来导入 A 的函数:

from ..A import some_fn

这个线程在这里pycharm 和 unittesting - structuring project references 将测试目录标记为这样,但是当我右键单击它时,我只能选择将其标记为没有效果的源根目录。

我也不能真正从相对导入更改为绝对导入,因为它会破坏我在其他项目中将其用作子模块的能力。任何有关如何解决此问题的建议将不胜感激。

更新:我也遇到了这个线程如何在 Python 模块中正确使用相对或绝对导入?而且我不是该解决方案的忠实拥护者(我不希望在 try/except 块中导入镜像),但它确实在一定程度上解决了问题。我仍然希望有一个更优雅的解决方案,但如果没有,那确实可以解决错误。

4

1 回答 1

1

这里的问题是A并且B是不同的包。您希望它们都是包的子myproj包。

我认为您所缺少的只是__init__.py父目录中的一个文件。允许您B从某物中相对导入某物A

myproj/
├── A
│   └── __init__.py
├── B
│   └── __init__.py
└── __init__.py
于 2013-11-18T21:44:19.983 回答