【问题标题】:Python not recognizing flask-jwt-extended module?Python无法识别flask-jwt-extended模块?
【发布时间】:2022-02-27 06:48:05
【问题描述】:

我有一个非常烦人的问题,我整天都在努力解决。我正在使用 Python 3.9.6 开发 Flask API;在 venv 中运行。我已经安装了 pip 并导入了 flask-jwt-extended 用于身份验证,但是 VSCode 和 Pycharm 都找不到该模块? pipfile 甚至说版本 4.1.0 包含在依赖项中。最初它说的是 3.7.0,所以我尝试升级到 4.1,但没有任何变化。我尝试删除 JWT 和 PYJWT 并重新安装它们,在有和没有它们的情况下运行 flask-jwt-extended ......几乎所有我能想到的组合,但它只是不断抛出

ModuleNotFoundError: No module named 'flask_jwt_manager'

每个。单身的。时间。我访问了很多网站,有些人似乎遇到了同样的情况,并且能够通过各种方式解决它,但在我的情况下没有一个有效。有谁知道这里发生了什么?这是我的 pipfile:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
flask = "*" 
flask-cors = "*"
bson = "*"
flask-pymongo = "*"
pymongo = {extras = ["srv"], version = "*"}
dnspython = "*"
flask-jwt-extended = "==4.3.1"
pyjwt = "*"

[dev-packages]

[requires]
python_version = "3.9"

以及我的 api 顶部的导入:

import datetime
import json

import pymongo
from flask_jwt_extended import JWTManager
from bson.objectid import ObjectId
from flask import Flask, jsonify, make_response, Response, request
from flask_cors import CORS
from pymongo import ReturnDocument
from werkzeug.security import generate_password_hash, check_password_hash

根据我的阅读,flask-jwt-extended 需要 PyJWT,但我已经尝试过安装和不安装它;没运气。我是新手,如果我错过了一些愚蠢的东西,请原谅我。 (在 2019 年的 MacBook Pro 上,如果这很重要的话;人们告诉我 M1 芯片过去曾引起过问题)

【问题讨论】:

    标签: python flask pip jwt flask-jwt-extended


    【解决方案1】:

    所以好消息是依赖没有问题;如果你有 docker,你可以运行下面的脚本来证明它工作正常。

    因此它必须是环保的。您确定使用正确的 virtualenv 吗?你必须通过 pipenv 运行你的 python 才能选择正确的环境,或者这样配置你的 IDE。

    PROJECT_NAME=check-pipenv
    
    PYTHON_VERSION=3.9.6
    
    cd "$(mktemp -d)" || exit
    
    cat << EOF > Pipfile
    [[source]]
    url = "https://pypi.org/simple"
    verify_ssl = true
    name = "pypi"
    
    [packages]
    flask = "*"
    flask-cors = "*"
    bson = "*"
    flask-pymongo = "*"
    pymongo = {extras = ["srv"], version = "*"}
    dnspython = "*"
    flask-jwt-extended = "==4.3.1"
    pyjwt = "*"
    
    [dev-packages]
    
    [requires]
    python_version = "${PYTHON_VERSION}"
    EOF
    
    cat << 'EOF' > ${PROJECT_NAME}.py
    import datetime
    import json
    
    import pymongo
    from flask_jwt_extended import JWTManager
    from bson.objectid import ObjectId
    from flask import Flask, jsonify, make_response, Response, request
    from flask_cors import CORS
    from pymongo import ReturnDocument
    from werkzeug.security import generate_password_hash, check_password_hash
    print('Working')
    EOF
    
    cat << EOF > Dockerfile
    FROM python:${PYTHON_VERSION}-slim-buster
    WORKDIR /workdir
    COPY Pipfile Pipfile
    RUN pip install pipenv
    RUN pipenv install && pipenv run pip freeze
    COPY . .
    CMD [ "pipenv", "run", "python", "${PROJECT_NAME}.py"]
    EOF
    
    DOCKER_BUILDKIT=0 docker build --tag ${PROJECT_NAME}:latest .
    docker run --rm --name ${PROJECT_NAME} ${PROJECT_NAME}:latest
    

    打印:

    Working
    

    【讨论】:

      【解决方案2】:

      嗯,原来是导入语句。 PyJWT 需要作为“import jwt”导入。使情况更加复杂的是,flask-jwt-extended 与基本的“jwt”不兼容。所以卸载jwt,安装PyJWT,安装flask-jwt-extended并确保将PyJWT导入为“import jwt”。

      【讨论】:

      • 请阅读“How to Answer”。您对答案的使用不在准则范围内。
      猜你喜欢
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      相关资源
      最近更新 更多