Python3导入模块没有相对路径

问题描述 投票:0回答:1

我有一个包含以下 py 文件的文件夹 test

mytest/
- test.py
- utility.py
- pb2.py
- pb2_grpc.py

pb2和pb2_grpc是由python grpc工具生成的。

在test.py中,有

import utility
import pb2
import pb2_grpc

在pb2_grpc.py中,有

import pb2

当我 cd 到 mytest 目录并执行时

python -m unittest test.py

一切都很好。但是现在我需要在父目录中执行测试,然后我执行时遇到“no module name”错误

python -m unittest mytest/test.py

然后我将

import utility
更改为
from . import utility
,它有效。但对于那些自动生成的文件,我无法编辑它们。

我现在能做的唯一方法是在我的test.py中添加

os.append.path(os.path.dirname(__file__))
,然后当调用pb2_grpc时,它知道在哪里找到pb2。但有更好的方法吗?

python python-3.x python-module
1个回答
0
投票

很多相对导入问题可以通过添加一个空的 init.py 文件并将目录作为一个包来解决,导入的包结构似乎更适合相对导入,唯一的区别是

python -m unittest mytest/test.py
你运行它
python -m unittest mytest.test
这可能无法解决问题,或者您可能不想将目录变成模块,但值得一试

© www.soinside.com 2019 - 2024. All rights reserved.