我一直在使用PyCharm来开发一个子模块,以便进入其他几个项目。我有一个包含我的单元测试的Tests目录,我想从PyCharm运行它们,但是当我测试任何包含相对导入的代码时,我得到:
“ValueError:尝试相对导入超出顶级包”
我的结构大致是:
一个
____init____.py
...
乙
____init____.py
...
测试
____init____.py
...
我正在测试B模块中使用相对导入导入A:
的函数 from ..A import some_fn
这里的这个帖子pycharm and unittesting - structuring project引用标记测试目录,但是当我右键单击它时,我只能选择将它标记为无效的源根。
我也无法真正从相对转换为绝对导入,因为它会破坏我在其他项目中将其用作子模块的能力。任何关于如何解决这个问题的建议都将非常感激。
更新:我也遇到了这个帖子How to properly use relative or absolute imports in Python modules?,我不是解决方案的忠实粉丝(我不想在try / except块中使用镜像导入),但它确实解决了这个问题。我仍然会欣赏更优雅的解决方案,但如果没有,那确实可以解决错误。
答案 0 :(得分:1)
这里的问题是A
和B
是不同的包。您希望它们都是myproj
包的子包。
我认为您缺少的是父目录中的__init__.py
文件。允许您从B
A
中的内容
myproj/
├── A
│ └── __init__.py
├── B
│ └── __init__.py
└── __init__.py