为啥我的 Flask 尝试从不同的目录导入?

Posted

技术标签:

【中文标题】为啥我的 Flask 尝试从不同的目录导入?【英文标题】:Why does my Flask try to import from a different directory?为什么我的 Flask 尝试从不同的目录导入? 【发布时间】:2022-01-20 20:15:22 【问题描述】:

我正在尝试运行以下代码,但在第 3 行我收到一条错误消息

'导入错误:无法从 'sqlalchemy.ext.declartive' 导入名称 'declaritive_base' (C:\users\timot\flasky\venv\lib\site-packages\sqlalchemy\ext\declarative_init em>_.py)'

我可以看到,当我使用 py model.py 运行该文件时,它表明它正在上述目录中进行挖掘。这不是我想要它寻找这些包的地方。我希望它改为寻找以下内容。

C:\users\timot\flasky2\flasky\venv\lib\site-packages\sqlalchemy\

由于某种原因 pip install SQLalchemy 和 pip install flask_SQLalchemy 没有安装到上面列出的 flasky2 子目录中?

model.py 的父目录在 flasky2/flasky/venv

谁能告诉我如何告诉我的环境从 flasky2/flasky/venv lib 文件夹安装和打开库?

model.py 适合感兴趣的人。

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declartive_base
from sqlalchemy.orm import sessionmaker, relationship

Base = declartive_base()

class User(Base):
    __tablename__ = "person"

    id = Column('id', Integer, primary_key=True, nullable=False)
    username = Column('username', String, unique=True, nullable=False)
    emailAddress = Column('emailAddress', String, unique=True, nullable=False)
    password = Column('password', String, nullable=False)
    streetNumber = Column('streetNumber', String, nullable=False)
    suburb = Column('suburb', String, nullable=False)
    state = Column('state', String, nullable=False)
    postCode = Column('postCode', String, nullable=False)
    cardNumber = Column('cardNumber', String, nullable=False)
    cardCVC = Column('cardCVC', String, nullable=False)
    cardExpiry = Column('cardExpiry', String, nullable=False)

engine = create_engine('sqlite:///:db.py', echo=True)
base.metadata.create_all(bind=engine)

【问题讨论】:

venv 是否激活?请注意,您有一个错字declartive_base() 应该是Base = declarative_base() 【参考方案1】:

简短回答:这是因为您的 python 解释器可能指向不同的位置。在你的虚拟环境中重定向到正确的那个,它会起作用。

帮助您的要点

如何找到当前python解释器的路径?

如果你使用的是 git bash:

$ which python

你也可以创建一个脚本:

import sys
print(sys.executable)

现在您知道了正确的 Python 解释器的路径。如果您使用的是 VScode(推荐),请单击解释器

现在,在此处插入所需的 Python 解释器的路径。

它会完成这项工作。 如果您仍然遇到问题,请知道

【讨论】:

以上是关于为啥我的 Flask 尝试从不同的目录导入?的主要内容,如果未能解决你的问题,请参考以下文章

从不同目录导入文件

flask+ngix+uwsgi 没有从路由 ubuntu 20 中剥离脚本根目录

Flask-WTForms 在我的项目目录中找不到 WTForms

为啥我的WEB-INF目录下没有classes目录,导入struts也不在lib目录下,但是可以正常运行!

为啥 Xcode 5 从 Finder 拖入资产目录时拒绝识别我的图标?

从目录导入python中的用户定义模块