第2章:环境准备——Python环境搭建、pip与venv基础、Node.js与npm基础
说实话,很多初学者在包依赖管理上栽跟头,根源往往不是工具不会用,而是环境没搭好。我见过太多人直接在系统Python里装包,结果项目一多,依赖冲突得想砸电脑。这一章,咱们就把地基打牢。
2.1 Python环境搭建
Python版本这事儿,我建议你装3.8以上。为什么?因为3.6已经停止维护了,3.7也快了。你想想看,一个没人维护的版本,出了安全漏洞谁管?
我个人习惯用pyenv来管理多个Python版本。但如果你是新手,直接从官网下载安装包也行。这里有个坑——安装时记得勾选「Add Python to PATH」。我曾经帮一个同事排查问题,搞了半天发现他根本没勾这个选项,命令行里死活找不到python命令。
装好后,打开终端验证一下:
python --version
# 应该输出类似 Python 3.9.7
如果输出的是Python 2.x,那你可能装错了版本,或者系统里还残留着旧版本。嗯,这里要注意,macOS和某些Linux发行版会预装Python 2,别搞混了。
2.2 pip与venv基础
pip是Python的包管理工具,说白了就是帮你下载、安装、卸载第三方库的。venv则是虚拟环境工具,让每个项目有自己独立的依赖空间。
为什么要用虚拟环境?我举个例子:项目A需要Django 3.2,项目B需要Django 4.0。如果没有虚拟环境,你装一个就得卸载另一个,烦不烦?有了venv,每个项目各玩各的,互不干扰。
2.2.1 pip的基本操作
先看看pip本身是不是最新的:
pip install --upgrade pip
安装一个包:
pip install requests
安装指定版本:
pip install requests==2.28.1
查看已安装的包:
pip list
导出依赖清单:
pip freeze > requirements.txt
这个requirements.txt文件,就是项目的依赖清单。别人拿到你的项目,只需要运行pip install -r requirements.txt就能装好所有依赖。我在项目中遇到过好几次,同事忘了更新这个文件,结果部署时各种报错。所以记住:每次新增或更新依赖,顺手跑一下pip freeze。
2.2.2 venv的使用
创建虚拟环境很简单:
python -m venv myenv
这会在当前目录下创建一个叫myenv的文件夹,里面就是独立的Python环境。激活它:
# Windows
myenv\Scripts\activate
# macOS/Linux
source myenv/bin/activate
激活后,命令行前面会出现(myenv)的提示,说明你现在在虚拟环境里了。这时候你装任何包,都不会影响到系统全局的Python。
.venv。这样既隐蔽,又不会跟项目文件混在一起。很多IDE(比如VS Code)会自动识别这个文件夹。
退出虚拟环境:
deactivate
2.3 Node.js与npm基础
Node.js和npm的关系,就像Python和pip。Node.js是运行时环境,npm是包管理器。不过npm比pip多一个功能——它还能管理项目的脚本和任务。
2.3.1 安装Node.js
去官网下载LTS版本就行。LTS是长期支持版,稳定可靠。我个人不建议追新,除非你想当小白鼠。
装好后验证:
node --version
# 输出类似 v18.12.1
npm --version
# 输出类似 8.19.2
2.3.2 npm的核心概念
每个Node.js项目都有一个package.json文件,它相当于项目的身份证和依赖清单。用npm init可以生成这个文件:
npm init -y
-y参数表示使用默认配置,省得一路回车。装包用npm install:
# 安装到 dependencies(生产依赖)
npm install express
# 安装到 devDependencies(开发依赖)
npm install --save-dev jest
生产依赖和开发依赖的区别?说白了,生产依赖是项目运行时必须的,比如Express框架。开发依赖是开发时才需要的,比如测试工具Jest。我在项目中遇到过有人把所有依赖都扔到dependencies里,结果生产环境装了一堆没用的包,部署包体积大了好几倍。
查看已安装的包:
npm list
卸载包:
npm uninstall express
2.3.3 package-lock.json的作用
你可能会发现,每次装完包,项目里会多出一个package-lock.json文件。这个文件记录了每个依赖的确切版本号。为什么要这个?因为package.json里写的版本号可能带范围符号,比如^4.18.0,意思是允许安装4.18.0到4.x.x的最新版本。不同时间安装,版本可能不一样,这就埋下了隐患。
package-lock.json锁死了所有依赖的精确版本,确保每个人、每次安装都得到一模一样的环境。这个文件一定要提交到Git仓库里。
- Python用venv隔离项目环境,Node.js用node_modules隔离
- pip用requirements.txt记录依赖,npm用package.json + package-lock.json
- 虚拟环境/本地安装是必须的,别偷懒装全局
2.4 本章知识体系
下面这张图,帮你理清Python和Node.js两套工具链的对应关系:
看到没?两套体系的结构几乎一模一样。理解了Python那一套,Node.js这边也就通了。这就是我说的「一通百通」。
好了,环境准备好了,下一章咱们就开始真正动手,看看包依赖到底是怎么管理的。