Python

分类下相关文章

flask socket.io 生产环境部署

eventlet 由于 WSGI 不支持 WebSocket,所以需要引入 eventlet 来支持 WebSocket 协议。 (虽然 socket.io 也支持 http 协议,但是体验上会差很多。) eventlet is the best performant option, with support for long-polling and WebSocket transports 而在开发环境,如果没有安装 eventlet,默认使用的是 Werkzeug web server: In production mode the eventlet web server is us ...

阅读全文...

flask socket.io 使用自定义 path 路径

默认路径 使用 flask socket.io 启动服务之后,默认的路径是: /socket.io 但是由于我把 rasa 和 flask socket.io 部署在同一个域名下, rasa 本身自带了一个 socket.io,所以我需要将 flask socket.io 在线上部署时, 更换一个路径,以做区分。 flask 端调整 通过 path 参数设置新路径 socketio = SocketIO(app, path="f_api_socket.io") 如果不设置 path 参数,就是默认的 socket.io。 浏览器 js 端调整 将原有的 var sock ...

阅读全文...

python socket.io 客户端测试代码

为了测试基于 flask 实现的 socket.io server 端的功能,除了使用浏览器端 js 测试之外,我还想看看诸如 python,C# 这样的客户端的实现是否支持 flask 的 session 机制。即是否能够正常获取到 session id。 经过测试,server 端确实可以正常获取到 session id。 代码 import socketio # 创建 Socket.IO 客户端实例 sio = socketio.Client() # 当连接成功时的处理函数 @sio.event def connect(): print("Connected to ...

阅读全文...

python flask web 框架安装 socket.io 模块

想基于 python 的 socket.io 实现实时消息,及在线状态检测。 同时兼容 rasa 的 socket.io 版本。 确认 rasa 对应的 socket.io 版本 > conda list socketio (rasa) # packages in environment at ~/miniconda3/envs/rasa: # Name Version Build Channel python-socketio 5.8.0 pypi_0 ...

阅读全文...

使用 pylint 检查 python 代码的低级错误

写大段的脚本语言越来越没信心,因为没有编译过程,很多低级错误很难在开发时发现。比如,未定义的变量名。。。 找了个 python 代码检查工具 pylint,用起来还挺方便。 安装 pylint pip3 install pylint 确认安装成功 > pylint --version pylint 3.0.2 astroid 3.0.1 Python 3.8.0 (default, Dec 9 2021, 17:53:27) [GCC 8.4.0] 只显示错误信息 过滤掉警告信息。因为,太久不写 python,到处都是变量名风格警告。 pylint --errors-only ac ...

阅读全文...

flask 使用 sqlalchemy 访问 MySQL 数据库

之前用的 python orm 库 orator 发现不但很久没更新了,而且安装报错。 为了保险起见还是继续使用 sqlalchemy 吧,毕竟是主流。 flask 还有个专门的库封装了 sqlalchemy。 安装 flask sqlalchemy pip install -U Flask-SQLAlchemy pip install pymysql pip install cryptography pymysql 是一个纯 python 实现的访问 mysql 的一个库。 版本号确认 从 pip 的输出,可以看到安装的版本 Successfully installed Flask-SQL ...

阅读全文...

生产服务器 Flask 多并发支持,基于 Gunicorn

自从用了 Golang 开发服务端之后,好多年没有经历部署 Python 服务的苦恼。 但是由于要开发 Rasa 相关的服务,为了统一语言,还是继续使用了 Python Flask 框架。 又一次体验部署 Python 生产环境的艰辛。 需求 需要将 Python Flask 写的一个接口服务部署到生产服务器。 目前 Flask 部署在 docker 中,依然是以 debug 模式运行,无法同时响应多个请求。 所以需求是: 找到 Flask 生产环境部署方式 适合 docker 部署 gunicorn 支持并发的原理 我看大部分推荐的部署方式是 gunicorn, 对于 Flask / D ...

阅读全文...

Ubuntu 安装 Python 环境管理工具 Miniconda 3

救命稻草 Miniconda 不用 Miniconda 不行了,最近测试一个 python 的人工语音合成模块给 Android App 使用,安装依赖之后, 直接把 Rasa 的开发环境搞崩了。。。怎么重装都不行。 再也不敢这样粗放地管理 Python 依赖了,还是老老实实地用上环境隔离吧。 下载 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh 链接来自于: https://docs.conda.io/en/latest/miniconda.html 安装 > bash Minico ...

阅读全文...

python Windows GUI 方案 flet, 基于 flutter 组件

在调研 python tkinter 的 Windows GUI 客户端方案时,突然看到某个公众号文章中有人评论到为何不用 flet。 正好出差当天晚上睡得早,凌晨 3 点半就再也睡不着了,于是手机上翻看了 flet 官网上的所有文档,发现真是一个宝藏啊。 语法简单,且基于 flutter 的组件库,颜值有保障。而且还有跨平台的潜力。 安装 flet 安装方法极度简单,按照官方文档,一行 pip install flet 搞定。 Hello world import flet as ft def main(page: ft.Page): page.title = "长征 ...

阅读全文...

使用 conda 管理 pytorch 的 python 开发环境

目录 [X] 查看已有环境 [X] 新建一个开发环境 [X] 切换开发环境 [X] 开发环境配置文件导出 [X] 到一个新开发机,由配置文件重建一个开发环境 [X] 使用国内的镜像源加速下载 查看已有环境 conda 安装好后,可以通过指令 conda info -e 或者 conda env list 查看已有环境情况。 env list 这个命令相对容易记忆。 (base) PS D:\work> conda info -e # conda environments: # base * D:\app\miniconda (base) PS D ...

阅读全文...

生产环境部署 FastAPI + Nginx + Systemd 服务

测试开发环境 uvicorn server:app --reload 但是生产环境需要配置的项目要更多,例如: 指定端口号 如何利用多核。python 的历史问题 nginx 配置 systemd 配置 uvicorn 是什么 Uvicorn is a lightning-fast ASGI server implementation, using uvloop and httptools. 与 Gunicorn 一同使用 参考 uvicorn 及 FastAPI 的官方文档: https://www.uvicorn.org/#running-with-gunicorn https ...

阅读全文...

Python EasyGUI 调起文件选择窗口

由于 opencv 做图像识别需要测试大量的图片样本,逐一比对效果,以方便调整参数及处理逻辑。 如果写死文件路径,每次换图片都需要改代码,非常不方便;也不利于代码管理。 所以,我需要能用 python 调起文件选择窗口,选择图片,然后返回文件路径。 EasyGUI 找到一个非常合适的库,EasyGUI。很容易拼错成 EasyUI。 EasyGUI is a module for very simple, very easy GUI programming in Python. EasyGUI is different from other GUI libraries in that Easy ...

阅读全文...

python 代码格式化工具 black,类似 gofmt

从网上下载了一段 opencv 的 python 代码,代码风格异常粗放豪迈,不到 100 行的代码,几十处 pep8 格式警告。 手动改起来,太累了,所以想找一个类似 golang gofmt 那样的代码格式化工具,能一键搞定搞定。 方案一:YAPF Google 出品,类似 gofmt 的理念。可以定制化配置。 https://github.com/google/yapf 方案二:black 但是从 github star 数来看,black 这个格式化工具更流行。YAPF 12k star,black 25k star。(2022-02-10) https://github.com/ps ...

阅读全文...

Ubuntu 升级 Python 3.6 版本到 3.8

由于我要使用 tmuxp 替代 tmuxinator, 其依赖的 Python 最低版本是 3.7,而我本机的 Python 版本为 3.6。 所以,我要安装 3.8 版本,并将默认的 python3 命令指向 3.8。 系统环境 Ubuntu 18.04 (Windows WSL) Python 3.6.9 > python3 --version Python 3.6.9 Ubuntu 安装 Python 3.8 sudo apt install python3.8 将 python3.6 和 3.8 添加到 update-alternatives sudo update-al ...

阅读全文...

FastAPI 操作数据库

原本想使用 python orator 这个 ORM 方案。 但是发现搜索 FastAPI ORM 的方案,并没有人提到 orator。 我主要是担心第一次使用 FastAPI 这个异步框架,再配合上 orator 这类异常小众的 ORM,会不会踩坑。 所以,还是优先使用官方推荐的方案。至于是不是 ORM,不重要。 encode/databases FastAPI 官方文档里推荐的异步操作数据库的方案是 encode/databases。 参考: https://fastapi.tiangolo.com/advanced/async-sql-databases/ 不过里面的示例代码都是 dat ...

阅读全文...