尝试使用python m在顶层包之外进行相对导入

2024-04-25 23:53:45 发布

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

我已经看了大多数关于相对导入的链接,尤其是那些关于顶级包的链接,但是我仍然有很多麻烦让我的相关导入代码正常工作。作为参考,我使用的是python3.6。在

我有一个要运行的测试目录,隔离在它们自己的目录tests中。我想将所有模块包导入一个名为输入测试.py. 这是我的项目目录的格式。file directory

在输入测试.py,我尝试通过以下方式导入模块:

from .. import modules

我得到了一个错误:

File "/Users/wfehrnstrom/Desktop/meeting_minutes/tests/InputTests.py", 
line 2, in <module>
from .. import modules
ValueError: attempted relative import beyond top-level package<code>

但是,我使用的是命令:python -m tests.InputTests,它应该告诉解释器从我的顶层目录运行所有东西。所以我想我的问题是,为什么我的相对import语句不能工作,因为我是从上面的包运行这个的。这个堆栈溢出帖子似乎详细说明了我需要什么,但是他们的解决方案,用-m运行对我来说不起作用:How to do relative imports in Python?

另外,在这个堆栈溢出帖子中似乎有一个矛盾之处:Relative importing modules from parent folder subfolder

后一篇文章似乎暗示了。。还有。不要根据执行Python命令的位置进行更改,但是前者说确实如此。这让我非常困惑。有人能澄清相关进口并解决这一矛盾吗?谢谢您。在


Tags: 模块infrompyimport命令目录modules
1条回答
网友
1楼 · 发布于 2024-04-25 23:53:45

我只能尝试回答您关于Python2.7的问题,但我希望这对您有所帮助。在

在回答“如何在Python中进行相对导入?”链接是部分过时的,因为它建议基于模块的__name__进行导入,对于主脚本来说这将是__main__,因此即使在使用-m时,也根本不会在该模块中使用相对导入。在

PEP 366通过引入__package__属性解决了这个问题。在

使用python -m tests.InputTests时,InputTests.py中的__package__的值将是tests。这不允许从父包导入,因为tests是当前的顶级包。在

在“会议记录”目录中运行python -m modules.tests.InputTests应该可以解决这个问题。在

相关问题 更多 >