Python导入-找不到模块

时间:2019-12-18 19:33:10

标签: python

我正在关注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()])

更新

据我所知,文件夹结构是正确的:

Folder structure

2 个答案:

答案 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