如何在与导入模块同名的包中导入Python模块?

3 投票
3 回答
1937 浏览
提问于 2025-04-17 10:21

假设我有以下内容(project1在Python的路径上):

/project1/utils/utils.py
    def cool_function():
        print "cool"

/project1/backup/utils.py
    from utils.utils import cool_function

这会报错:“ImportError: No module named utils”。

我猜这是因为它在backup.utils里找utils.cool_function。有没有什么办法可以不重命名utils这个包呢?我觉得我的命名方式很合理,也很自然,所以不太想改。如果这样做是更好的选择和标准做法,那我会考虑改名的!

谢谢!

补充说明:我使用的是Python 2.7

3 个回答

0

对我来说一切正常。

项目结构如下:

project/
|-- run.py
`-- utils
|   |-- __init__.py
|   |-- utils.py
|-- backup
    |-- __init__.py
    |-- utils.py

你需要在project目录下运行python3 run.py这个命令。

补充:抱歉,我刚看到这不适用于python-2.x

2

你可以使用相对导入

from ..utils.utils import cool_function
1

如果 project1 是一个包(它的父目录在 sys.path 中,并且有一个 __init__.py 文件),你可以这样导入:from project1.utils.utils import cool_function。你可以查看 PEP328,这个内容在 Python 2.5 中是新的。如果你使用的是 2.5 或更高版本,from ..utils.utils import cool_function 也可能可以用。

撰写回答