从 node 到 python

简介: 从 node 到 python

众所周知,node.js 在异步 IO 有着天然优势, 而 python 则在数据科学处理方面有着更广泛的应用。本文将会对比 node.js 有一定开发经验的读者,简单介绍几个入门 python 开发推荐使用的相关工具。




包管理 · pipenv


npm 是 node.js 官方绑定的包管理工具,而 python 中对应的是 pip 。

但是,使用 npm 若不指定 -g 参数全局安装,则默认都安装在当前项目的 node_modules 下,这种依赖包管理按项目隔离区分的方式其实是非常方便的。但是 pip 坑爹的是并没有类似于 node_modules 依赖包统一入口,除非 pip install 时通过 --target 参数手动指定安装目录,另外记录依赖包信息的 requirements.txt 文件实在是太简陋了


pipenv:强烈推荐使用的包管理工具。


pipenv 将会创建一个独立的虚拟环境,所有操作都将在这个虚拟环境中进行。

首先,你必须通过 pipenv 在虚拟环境中安装一个 python 版本:

pipenv    --python 3.7

虚拟环境中的 python 版本与你物理机本地的 python 版本相互隔离、互不影响,这意味你可以方便随意的进行 python 版本的切换。

其他依赖包也是通过 install 命令安装,所有包信息都将会记录在 PipfilePipfile.lock 文件中,类似于 package.json 和 package-lock.json 。


在虚拟环境中进行操作必须先进入到此虚拟环境中:

pipenv  shell

有时候先执行 pipenv shell ,再执行后续操作(如 python3 test.py ),这样分了两步并不方便,所以你可以直接一条命令 pipenv run + command 搞定,如:

pipenv  run  python3  test.py

开发 · nodemon


对于 node.js ,本地开发阶段我们常常使用 nodemon 去监控文件变动并自动重启程序,在 python 开发中同样推荐你使用 nodemon 。


nodemon 默认使用 python 命令执行 py 后缀文件,也就是 python 2.7 版。为了使用 3.x 版,你只需在 nodemon.json 配置文件修改 execMap 执行映射关系,将 py 后缀的文件使用 python3 执行:




其它配置项的代表含义仍然是一致的,例如 watch 监控文件,ignore 忽略文件等等。


web 框架 · sanic


node.js 中的 web 框架众多,python 中同样如此。比较出名的有 flask、django、tornado,但我更推荐你使用的是 sanic 。


sanic 的特性也是异步无阻赛,只支持 python 3.5 及其以上版本,因为其依赖的 async/await 特性只在 python 3.5 版本才添加,熟悉 ES6 的读者应该很熟悉 async/await 了,其作用在 python 中其实也是异曲同工。


sanic 可以轻松配置多 worker 的模式,但是在高版本 macOS 系统中直接使用会报错,需要先解除系统对多线程的限制, ~/.bash_profile 文件中添加:

export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

更多 sanic 框架相关的内容请参考官方文档。


部署 · pm2


部署应用时,在 node.js 中我们一般使用 pm2 去监控程序,让它挂了能够自动重启,而在 python 中我们同样可以使用 pm2 。


配置文件只需要修改 interpreter,示例:




interpreter 指定 python3 。

exec_mode 必须且只能是 fork 模式。因为 pm2 的 cluster 模式是依赖于 node.js 的,无法直接在 python 中使用,但我们其实并不用对此过于在意,因为很多框架本身已经提供了多 worker 的支持,其次我们关注的重点仍在于异常重启,而对比使用 supervisor 这种传统的部署监控方式,我当然更推荐 pm2 。

目录
相关文章
|
8月前
|
JavaScript 前端开发 Python
Node.js在Python中的应用实例demo
Node.js在Python中的应用实例demo
|
8月前
|
JavaScript 前端开发 API
Node.js在Python中的应用实例解析
Node.js在Python中的应用实例解析
|
9月前
|
JavaScript Python 内存技术
error C:\Users\Acer\Downloads\Desktop\hrsaas-84\node_modules\deasync: 莫名其妙报错一堆python问题
error C:\Users\Acer\Downloads\Desktop\hrsaas-84\node_modules\deasync: 莫名其妙报错一堆python问题
141 0
|
1月前
|
Python
NPM【问题 01】npm i node-sass@4.14.1报错not found: python2及Cannot download问题处理
NPM【问题 01】npm i node-sass@4.14.1报错not found: python2及Cannot download问题处理
138 0
|
8月前
|
JavaScript 前端开发 中间件
python web 开发与 Node.js + Express 创建web服务器入门
python web 开发与 Node.js + Express 创建web服务器入门
102 0
|
9月前
|
网络架构 Python
在 Node 中调用 Python
在 Node 中调用 Python
92 0
|
9月前
|
监控 开发工具 Docker
Docker 镜像构建:Python & Node
Docker 镜像构建:Python & Node
412 0
|
机器学习/深度学习 算法 C++
python无法导入自定义的包:未解析的引用“Node“
python无法导入自定义的包:未解析的引用“Node“
python无法导入自定义的包:未解析的引用“Node“
|
PHP Python
ActiveRecord语言实现PHP、Python、Node.js
ActiveRecord语言实现PHP、Python、Node.js
110 0
ActiveRecord语言实现PHP、Python、Node.js

热门文章

最新文章