如何在 python 中正确导入模块?

How to correctly import modules in pytnon?

我有这个代码

server.py

from admin.users.views import users_blueprint

server/admin/users/forms.py

from flask_wtf import FlaskForm
from wtforms import  StringField, SubmitField

class AddForm(FlaskForm):
   pass

server/admin/users/views.py

from flask import Blueprint, render_template, redirect, url_for
from forms import AddForm
users_blueprint = Blueprint('users_blueprint', __name__, template_folder='templates/users')

当我 运行 server.py 时,我得到这个错误:

Traceback (most recent call last):
  File "server/server.py", line 6, in <module>
    from admin.users.views import users_blueprint
  File "server\admin\users\views.py", line 2, in <module>
    from forms import AddForm
ModuleNotFoundError: No module named 'forms'

有人知道发生了什么事吗?

由于 forms.py 与调用代码文件 (views.py) 位于同一文件夹中,您可以执行以下操作:

from . import forms

在您的导入语句中,尝试:

from .forms import AddForm

基本原理:当您 运行 代码时,Python 就是 directory-sensitive。在您调用 server.py 的顶级目录中没有名为 forms 的相邻模块。 . 告诉 server/admin/users/views.pyserver/admin/users/forms.py 模块相邻导入。

您可以添加

import sys
from pathlib import Path

sys.path.append(str(Path('.').absolute().parent))

导入时检查父目录。

导入是相对于您在启动 python 脚本时工作的目录的。在这种情况下,您需要导入表单:

from admin.users.forms import AddForm

或者像这样使用相对导入:

from .forms import AddForm