Python相对导入找不到packag

2024-09-28 18:50:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我确信这是一个相当简单的问题,我只是错过了一些非常明显的东西,但是这个困境的答案已经让我困惑了好几个小时。在

我的项目目录结构如下所示:

-PhysicsMaterial
   -Macros
      __init__.py
      Macros.py
   -Modules
      __init__.py
      AvgAccel.py
      AvgVelocity.py
   -UnitTests
      __init__.py
      AvgAccelUnitTest.py
      AvgVelocityUnitTest.py
    __init__.py

除了对我的命名约定和目录结构的批评之外,我似乎不能使用相对导入。我正在尝试相对导入要在其中测试的模块文件AvgAccelUnitTest.py公司名称:

^{pr2}$

但是,我一直得到:

ValueError: Attempted relative import in non-package

因为我已经在整个结构中设置了所有的init文件,而且我还将top目录添加到PYTHONPATH中,所以我很困惑。为什么python不能正确地解释包和导入文件?在


Tags: 文件项目答案py目录modulesinit结构
2条回答

How to fix "Attempted relative import in non-package" even with __init__.py

好吧,我猜是要用了系统路径追加现在。为布伦巴恩、菲兰特和艾布拉姆斯鼓掌

这是因为您以__main__的身份运行脚本。运行这样的脚本时:

python /path/to/package/module.py

该文件是作为__main__加载的,而不是作为package.module加载的,因此它不能执行相对导入,因为它不是包的一部分。在

这会导致奇怪的错误,在脚本中定义的类被定义两次,一次是__main__.Class,另一次是package.module.Class,这可能导致isinstance检查失败和类似的奇怪情况。因此,通常不应该直接运行模块。在

对于您的测试,您可以删除tests目录中的__init__.py,只使用绝对导入而不是相对导入。事实上,您的测试可能根本不应该在包中。在

或者,您可以创建一个测试运行程序脚本来导入并运行测试。在

相关问题 更多 >