<<flask web开发>>hello.py遇见的几个坑

本文解决了在使用Flask框架时遇到的导入警告问题。通过更新导入语句为推荐方式,从flask_script导入Manager,并调整运行命令为指定子命令runserver来启动开发服务器。

在看<<flask web开发>>文章中第16页,在做示例2-3时,

from flask import Flask
app = Flask(__name__)
from flask.ext.script import Manager
manager = Manager(app)

@app.route('/user/<name>')
def user(name):
    return '<h1>Hello, %s!</h1>' % name

if __name__=='__main__':
    manager.run()
在运行时报以下错误:

E:\Python36>python hello.py
hello.py:42: ExtDeprecationWarning: Importing flask.ext.script is deprecated, use flask_script instead.
  from flask.ext.script import Manager
usage: hello.py [-?] {shell,runserver} ...

positional arguments:
  {shell,runserver}
    shell            Runs a Python shell inside Flask application context.
    runserver        Runs the Flask development server i.e. app.run()

optional arguments:
  -?, --help         show this help message and exit

 

这里面告诉了我们两条有用的信息,第一条就是,我们应该导入from flask_script import Manager

第二条就是运行的时候,我们应该写成E:\Python36>python hello.py runserver

 

最后完美解决!

### Flask 中 `ImportError: cannot import name 'JSONEncoder'` 的原因分析 该错误通常表明当前使用的 Flask 版本与其依赖库之间存在不兼容的情况。具体来说,可能是由于 Werkzeug 或其他相关模块版本过新或过旧引起的冲突。 #### 可能的原因 1. **Werkzeug 和 Flask 不匹配** Flask 使用的内部类可能已被移除或重命名,在较新的 Werkzeug 版本中不再支持某些功能[^1]。 2. **环境配置问题** 如果环境中同时安装了多个不同版本的 Flask 或其依赖项,则可能导致导入失败[^2]。 --- ### 解决方案 以下是几种常见的解决方案: #### 方法一:降级 Werkzeug 到兼容版本 通过调整 Werkzeug 的版本来修复此问题。可以尝试将 Werkzeug 升级到最新稳定版或者回退至更早的一个版本(如 0.16.x),这取决于所用 Flask 的版本需求。 ```bash pip install werkzeug==0.16.0 --force-reinstall ``` 如果使用的是 Flask 高于 2.0 的版本,则应升级 Werkzeug 至至少 2.0.0: ```bash pip install werkzeug>=2.0.0 --upgrade ``` #### 方法二:更新 Flask 到最新版本 确保 Flask 是最新的,因为开发者可能会针对此类问题发布补丁程序。 ```bash pip install flask --upgrade ``` #### 方法三:创建独立虚拟环境 为了避免全局 Python 环境中的包相互干扰,建议为项目单独设置一个虚拟环境并重新安装所需依赖。 ```bash python -m venv myenv source myenv/bin/activate # Linux/MacOS myenv\Scripts\activate # Windows pip install flask ``` #### 方法四:手动修改源码 (仅限开发调试阶段) 作为临时措施,可以在本地副本中找到缺失的定义位置,并将其显式引入。不过这种方法并不推荐用于生产环境,因为它违反了软件维护原则[^3]。 --- ### 示例代码验证 下面是一个简单的测试脚本来确认上述更改是否生效: ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/') def index(): return jsonify({'message': 'Hello World'}) if __name__ == '__main__': app.run(debug=True) ``` 执行以上代码时如果没有再次抛出相同的异常,则说明问题已得到解决。 --- ### 总结 当遇到类似 `cannot import name...` 这样的 ImportError 错误时,首要任务是检查各组件之间的版本一致性以及是否存在重复安装的现象。必要情况下可借助工具 pipdeptree 来可视化整个项目的依赖关系图谱以便定位潜在矛盾之处。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值