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

时间:2012-01-16 13:57:03

标签: python

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

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

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

抛出“ImportError:没有名为utils的模块”。

我认为这是因为它在backup.utils中搜索utils.cool_function。是否有一个而不是重命名utils包?我认为我的命名惯例是有道理的,而且很自然,所以我不愿意改变它。如果这是首选和标准练习,我会重命名它!

谢谢!

编辑:我使用的是Python 2.7

3 个答案:

答案 0 :(得分:2)

您可以使用relative imports

from ..utils.utils import cool_function

答案 1 :(得分:1)

如果project1是一个包(父目录在sys.path并且__init__.py),则可以执行from project1.utils.utils import cool_function。另请参阅PEP328,即new in python 2.5。如果您使用的是2.5或更高版本,from ..utils.utils import cool_function也可以使用。

答案 2 :(得分:0)

与我合作。

使用以下项目结构:

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

python3 run.py目录拨打project的地方。

修改:抱歉,我发现这不适用于python-2.x