Python与 Node.js技术对比
目录
- Python 虚拟环境
- pip 包管理器
- npm 与 Node.js
- JavaScript 与 Node.js 的关系
- Python 与 Node.js 应用场景对比
- Requests 库
- Pandas 库
- 微信小游戏技术环境
一、Python 虚拟环境
1.1 虚拟环境的概念
虚拟环境是 Python 项目隔离依赖的工具。每个虚拟环境拥有独立的 Python 解释器和第三方库,避免不同项目之间的版本冲突。
用 python -m venv 创建的虚拟环境本质上就是一个文件夹,包含独立的 Python 文件和库。系统没有全局注册表记录虚拟环境的存在,因此无法通过一个命令查看所有已创建的虚拟环境。
1.2 常用命令
创建虚拟环境
python -m venv venv
python3.11 -m venv venv
python -m venv D:\my_projects\my_env激活虚拟环境(Windows)
# CMD
venv\Scripts\activate
# PowerShell(可能需要先设置执行策略)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
venv\Scripts\Activate.ps1
# Git Bash
source venv/Scripts/activate激活虚拟环境(macOS / Linux)
source venv/bin/activate退出虚拟环境
deactivate删除虚拟环境
直接删除虚拟环境文件夹即可。
# Windows
rmdir /s venv
# macOS/Linux
rm -rf venv查看当前虚拟环境路径(激活状态下)
# Windows
echo %VIRTUAL_ENV%
# macOS/Linux
echo $VIRTUAL_ENV1.3 虚拟环境与全局环境的关系
- 虚拟环境创建时会复制一份当前全局 Python 环境中的 pip
- 后续全局 pip 升级不会影响已存在的虚拟环境
- 虚拟环境中的 pip 需要单独升级
在虚拟环境中升级 pip
python -m pip install --upgrade pip1.4 查看虚拟环境的几种方法
由于 venv 没有全局注册表,可以通过以下方式查找:
- 按目录查找:检查项目根目录下是否有 venv、.venv、env 等文件夹
- 搜索 pyvenv.cfg 文件:每个 venv 虚拟环境根目录下都有此文件
- 使用 virtualenvwrapper 等工具集中管理
1.5 使用 --upgrade-deps 参数创建新环境
Python 3.9+ 支持在创建虚拟环境时升级依赖:
python -m venv 新环境名 --upgrade-deps二、pip 包管理器
2.1 pip 升级
标准升级命令
python -m pip install --upgrade pip遇到"To modify pip, please run"错误的处理
当直接使用 pip install --upgrade pip 时,pip 可能拒绝升级自身。应使用 python -m pip 方式:
python -m pip install --upgrade pip指定完整路径升级
C:\Users\Administrator\AppData\Local\Programs\Python\Python313\python.exe -m pip install --upgrade pip用户目录安装(避免权限问题)
python -m pip install --upgrade pip --user升级到特定版本
pip install pip==25.0.12.2 查看 pip 版本
pip --version2.3 查看已安装包
pip list
pip list --outdated # 查看过时包2.4 pip 工作原理说明
使用 python -m pip 与直接使用 pip 的区别:
pip install --upgrade pip:正在运行的 pip 程序试图替换自己,可能出错python -m pip install --upgrade pip:用 Python 解释器调用 pip 模块,更稳定可靠
三、npm 与 Node.js
3.1 npm 是什么
npm 是 Node.js 的包管理器,类似于 Python 的 pip。安装 Node.js 时会自动安装 npm。
3.2 npm 常用命令对照
| 操作 | pip | npm |
|---|---|---|
| 安装包 | pip install 包名 | npm install 包名 |
| 全局安装 | pip install 包名 | npm install -g 包名 |
| 开发依赖安装 | pip install -e . | npm install --save-dev 包名 |
| 卸载包 | pip uninstall 包名 | npm uninstall 包名 |
| 列出已安装 | pip list | npm list |
| 导出依赖 | pip freeze > requirements.txt | 自动在 package-lock.json |
| 从文件安装 | pip install -r requirements.txt | npm install |
| 升级包 | pip install --upgrade 包名 | npm update 包名 |
| 查看过时包 | pip list --outdated | npm outdated |
3.3 pip 与 npm 的核心差异
依赖管理哲学
- pip:全局 Python 环境加虚拟环境隔离,依赖扁平化
- npm:每个项目独立依赖树(node_modules),支持嵌套版本
版本锁定
- pip:requirements.txt 手动写版本号,传递依赖不强制锁定
- npm:package.json 声明依赖范围,package-lock.json 自动锁定所有依赖的精确版本
安装位置
- pip:默认全局安装,需要虚拟环境控制
- npm:默认本地安装(项目目录)
安装速度与体积
- pip:依赖较少,安装快
- npm:node_modules 体积大(数百 MB 至 GB),安装较慢
3.4 依赖管理文件对比
pip 使用 requirements.txt:
requests==2.28.1
numpy==1.24.0npm 使用 package.json + package-lock.json:
{
"dependencies": {
"express": "^4.18.0"
}
}四、JavaScript 与 Node.js 的关系
4.1 核心定义
- JavaScript:一种编程语言(语法规则)
- Node.js:JavaScript 在服务器端的运行环境(平台)
4.2 类比理解
| Python 生态 | JavaScript 生态 | |
|---|---|---|
| 语言 | Python | JavaScript |
| 本地运行环境 | CPython (python.exe) | Node.js (node.exe) |
| 浏览器运行环境 | 不支持 | 浏览器(V8 引擎) |
| 包管理器 | pip | npm |
| 标准库 | os, sys, json | fs, http, path |
4.3 浏览器环境与 Node.js 环境对比
| 特性 | 浏览器环境 | Node.js 环境 |
|---|---|---|
| 语言 | JavaScript | JavaScript |
| DOM 操作 (document) | 支持 | 不支持 |
| 窗口对象 (window) | 支持 | 不支持 |
| 文件系统 (fs) | 不支持 | 支持 |
| HTTP 服务器 | 不支持 | 支持 |
| 进程管理 (process) | 不支持 | 支持 |
4.4 代码示例对比
JavaScript 语法在两端都支持:
const name = "张三";
console.log(name);Node.js 特有 API(浏览器中报错):
const fs = require('fs');
fs.writeFileSync('hello.txt', 'Hello Node.js!');浏览器特有 API(Node.js 中报错):
document.getElementById('myButton').click();4.5 常见误区澄清
- Node.js 是一门新语言:错误,它是 JavaScript 的运行环境
- JavaScript 只能做前端:错误,Node.js 使其可用于后端开发
- npm 与 Node.js 无关:错误,npm 是 Node.js 自带的包管理器
- 学会 JavaScript 即学会 Node.js:错误,还需学习 Node.js 的 API 和生态
五、Python 与 Node.js 应用场景对比
5.1 Python 主要应用场景
数据分析与人工智能
- 机器学习模型训练、数据清洗、量化交易、学术研究
- 核心库:PyTorch、TensorFlow、Pandas、NumPy
爬虫与自动化脚本
- 网页数据抓取、办公自动化(Excel/Word 批量处理)、GUI 操作
- 核心库:Scrapy、Requests、Selenium
Web 后端开发
- 知识付费平台、内容管理系统、科研机构官网
- 框架:Django(大而全)、Flask(小而轻)
运维与 DevOps
- 服务器自动化部署、日志分析
5.2 Node.js 主要应用场景
高并发 Web 后端与 API 网关
- 大型电商秒杀系统、外卖 App 后台接口、直播弹幕
- 适合做面向前端的数据聚合层(BFF)
实时通信应用
- 在线聊天室、协同办公(如 Figma、腾讯文档)、游戏服务器
- 核心库:Socket.io
前端工程化
- 打包工具(Webpack/Vite)、代码检查、CSS 预处理
轻量级微服务与 Serverless(云函数)
- 云函数(阿里云/腾讯云)、小型中间件
5.3 场景适用性对比表
| 场景分类 | Python | Node.js | 推荐 |
|---|---|---|---|
| AI/大数据/数学计算 | 统治级 | 几乎不能做 | Python |
| 爬虫/自动化办公 | 库丰富 | 较繁琐 | Python |
| 企业级复杂后端 | Django 强大 | 需自行拼组件 | 二者皆可 |
| 高并发秒杀/抢票 | 并发是短板 | 天生异步 | Node.js |
| 实时聊天/弹幕 | 轮询消耗大 | WebSocket 王者 | Node.js |
| 前端工程化 | 完全无关 | 唯一选择 | Node.js |
| 脚本处理文件 | 简单易懂 | 也很快 | 看习惯 |
5.4 各自的短板
Python 的短板
- 全局锁(GIL)导致无法真正利用多核 CPU 进行密集计算
- 不适合做高并发游戏服务器
Node.js 的短板
- 底层缺乏 GPU 调度库,机器学习计算效率极低
- 不适合做 AI/算法类任务
六、Requests 库
6.1 概述
Requests 是一个 HTTP 客户端库,用于发送网络请求(GET、POST 等),获取网页内容或调用 API 接口。它封装了 Python 内置的 urllib,提供更简洁的 API。
6.2 安装
pip install requests6.3 核心用法
GET 请求
import requests
response = requests.get('https://api.github.com/users/octocat')
print(response.json())POST 请求
payload = {'username': 'admin', 'password': '123456'}
response = requests.post('https://httpbin.org/post', data=payload)添加请求头(模拟浏览器)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
response = requests.get('https://www.example.com', headers=headers)流式下载大文件
response = requests.get('https://www.example.com/largefile.zip', stream=True)
with open('largefile.zip', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)6.4 常用场景
- 爬取网页数据
- 调用第三方 API(天气查询、股票行情、大模型接口)
- 自动化测试接口
- 下载图片/文件
七、Pandas 库
7.1 概述
Pandas 是一个数据处理和分析库,核心数据结构:
- Series:带标签的一维数组(类似 Excel 的一列)
- DataFrame:带标签的二维表格(类似 Excel 的一张表)
7.2 安装
pip install pandas7.3 核心用法
读取数据
import pandas as pd
df = pd.read_csv('sales_data.csv')
df = pd.read_excel('report.xlsx', sheet_name='Sheet1')
df = pd.read_json('data.json')快速预览数据
df.head() # 前 5 行
df.info() # 列名、类型、空值情况
df.describe() # 数值列的统计信息筛选数据
df[df['销售额'] > 10000]
df[(df['城市'] == '北京') & (df['年龄'] > 30)]分组聚合
df.groupby('城市')['销售额'].sum()
df.groupby(['城市', '产品类别']).agg({'销售额': 'sum', '销量': 'mean'})新增/修改列
df['单价'] = df['销售额'] / df['销量']
df['是否达标'] = df['销售额'].apply(lambda x: '是' if x > 10000 else '否')处理缺失值
df.dropna() # 删除有缺失值的行
df.fillna(0) # 填充缺失值为 0导出数据
df.to_csv('processed_data.csv', index=False)
df.to_excel('processed_data.xlsx', index=False)7.4 常用场景
- 数据分析报告
- 数据清洗(空值、重复值、格式转换)
- 金融数据分析
- 配合爬虫做数据存储和分析
7.5 Requests + Pandas 配合示例
import requests
import pandas as pd
# 抓取数据
url = 'https://api.example.com/stock/history?code=000001'
response = requests.get(url)
data = response.json()
# 数据分析
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
df['日均价'] = (df['high'] + df['low']) / 2
recent = df[df['date'] > pd.Timestamp.now() - pd.Timedelta(days=30)]
print(recent[['date', 'close', '日均价']].head())7.6 学习建议
- 不需要背诵所有函数,掌握常用 10 个操作即可
- 使用 Jupyter Notebook 逐条运行代码学习
- 用小数据集(Kaggle、和鲸社区)练手
- 遇到报错先看最后一行错误信息
八、微信小游戏技术环境
8.1 核心结论
电脑微信上的小游戏不是基于 Node.js 开发的。它运行在微信提供的定制化 JavaScript 环境中,该环境既不同于浏览器也不同于 Node.js。
8.2 三种运行环境对比
| 运行环境 | 核心能力 | 平台/场景 |
|---|---|---|
| Node.js | 文件读写 (fs)、网络服务 (http) | 服务器、开发工具 |
| 浏览器 | DOM 操作 (document)、窗口 (window) | 网页浏览 |
| 微信小游戏 | 触摸事件、画布、音频等微信原生 API | 微信 App 内 |
8.3 小游戏环境特点
- 没有 Node.js 特有的 API(fs、http 等模块不可用)
- 没有浏览器特有的 API(document、window 不可用)
- 使用微信提供的专用 API(如 wx.createCanvas、wx.createInnerAudioContext)
8.4 适配机制
为了让 Cocos、Layabox 等为浏览器设计的游戏引擎在小游戏中运行,开发者需要引入适配层(Adapter),用微信专用 API 伪装出浏览器的 document 和 window 对象。
8.5 底层技术
- JavaScript:游戏逻辑代码
- WebAssembly (WASM):核心逻辑(物理引擎、渲染)用 C/C++ 编写后编译为 WASM 运行
- Worker:多线程处理繁重计算任务,避免卡顿
- WebGPU:实现精美 3D 画面,突破 WebGL 渲染瓶颈