我正在关注Flask教程(在Pluralsight上)。我来到了我需要使用Flask-SQLalchemy初始化数据库的地方。在本教程中,这是通过以下命令在Python内部完成的:
from PyBook.PyBook import db
from PyBook.PyBook.Models import Company
(实际上,本教程中的名称有所不同,但是概念非常相同)
但是,当我尝试运行上述命令时,出现错误:
Traceback (most recent call last):
File <stdin>, line 1, in <module>
File "C:\Users\Jakob-Desktop\source\repos\PyBook\PyBook\PyBook.py", line 3, in <module
from forms.add_company import AddCompanyForm
ModuleNotFoundError: No module named 'forms'
这表明错误出在PyBook.py或add_company(PyBook引用了该错误,如下所示)。
有人可以告诉我我所缺少的吗?我是Python的新手。
PyBook.py
from flask import Flask, render_template, url_for, flash, redirect, request
from flask_sqlalchemy import SQLAlchemy
from forms.add_company import AddCompanyForm
import secrets, os
app = Flask(__name__)
app.config['SECRET_KEY'] = secrets.token_urlsafe(16)
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqllite:///' + os.path.join(basedir, 'pybook.db')
db = SQLAlchemy(app)
@app.route('/')
@app.route('/index')
def index():
return render_template('index.html')
(...)
add_company.py
from flask_wtf import Form
from wtforms.fields import StringField
from wtforms.fields.html5 import URLField
from wtforms.validators import DataRequired, url
class AddCompanyForm(Form):
name = StringField('name', validators=[DataRequired()])
更新
据我所知,文件夹结构是正确的:
答案 0 :(得分:0)
使用from .forms.add_company import AddCompanyForm
作为'。'用于浏览当前目录。
答案 1 :(得分:0)
问题在于“ forms”文件夹不在PYTHONPATH中。如果您想查看PYTHONPATH中的内容,可以使用:
import sys
print(sys.path)
您需要在Forms文件夹中添加一个名为__init__.py
的文件(通常为空,但并不总是这样)。我通常还会在主PyBook文件夹中添加一个。
以下是了解导入方式的重要指南:
Definite Guide To Python Imports
或者,您也可以将其添加到PyBook.py中的代码顶部
import sys
import os
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'forms'))
如果要添加代码,则无需执行以下操作:
from forms.add_company import AddCompanyForm
但是您可以使用:
from add_company import AddCompanyForm