如何在与导入模块同名的包中导入Python模块?
假设我有以下内容(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
也可能可以用。