Python无法找到在另一个模块中导入的模块

时间:2016-11-03 09:25:40

标签: python python-3.x python-module

我有一个像这样的项目结构:

│   main.py
│
├───equations
│       resolving.py
│       resolving_methods.py
│       __init__.py
│
└───func
    │   converter.py
    │   __init__.py
    │
    └───templates
            func_template.py

我试图从func.converter导入main.py类,并且从Equations.resolving_methods导入所有类

from func.converter import func_converter
from equations.resolving_methods import *

在这个文件中(转换器和resolving_methods)我有这行代码:

/converter.py

with open('templates/new_func.py', 'w', encoding='utf-8') as new_f:

from templates.new_func import my_func

/ resolving_methods:

from resolving import resolving

并且python发出以下错误:

ImportError: No module named 'resolving'

但是,当我尝试单独运行此文件时,代码可以正常运行

1 个答案:

答案 0 :(得分:1)

您正在使用绝对导入。绝对导入只能找到顶级模块,而您尝试导入嵌套在包内的名称。

您需要使用.指定完整的包路径,或使用包相对引用:

# absolute reference with package
from equations.resolving import resolving

# package relative import
from .resolving import resolving

请参阅Python教程的Intra-package References section

您的converter.py模块还有一个问题,即尝试使用相对路径打开文件。路径'templates/new_func.py'将针对当前工作目录的任何内容进行解析,该路径可以是计算机上的任何位置。根据模块__file__参数:

使用绝对路径
import os.path

HERE = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(HERE, 'new_func.py'), 'w', encoding='utf-8') as new_f: