gpt4 book ai didi

用于相对导入的 python 打包

转载 作者:IT老高 更新时间:2023-10-28 21:36:29 28 4
gpt4 key购买 nike

首先:对不起,我知道有很多关于相对导入的问题,但我只是没有找到解决方案。如果可能的话,我想使用以下目录布局:

myClass/
__init__.py
test/
demo.py
benchmark.py
specs.py
src/
__init__.py
myClass.py

现在我的问题是:

  • 包内的测试文件如何正确导入myClass.py?

  • 假设您将 myClass 作为 libs/myClass 或 include/myClass 中的子模块,您将如何从外部导入包?

到目前为止,我找不到一个优雅的解决方案。据我了解Guido's Decision应该可以做到 from ..src import myClass 但这会出错:

ValueError: Attempted relative import in non-package

看起来它没有将 myClass 视为包。 Reading the docs :

The __init__.py files are required to make Python treat the directories as containing packages;

我似乎遗漏了一些指定包脚本在哪里的东西,我应该使用 .pth 吗?

最佳答案

ValueError: Attempted relative import in non-package

意味着您尝试在不是包的模块中使用相对导入。它的问题在于具有此 from ... import 语句的文件,而不是您尝试导入的文件。

因此,如果您在测试中进行相对导入,例如,您应该将测试作为包的一部分。这意味着

  1. 添加 __init__.py 到测试/
  2. 从一些外部脚本运行它们,例如 Nose 测试

如果您以 python myClass/test/demo.py 运行某些东西,则相对导入也将不起作用,因为您运行的是演示模块而不是包。相对导入要求使用它们的模块本身作为包模块导入,from myClass.test.demo import blabla,或使用相对导入。

关于用于相对导入的 python 打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4348452/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com