第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命令。

⚠️ 注意: Windows用户安装时,安装路径不要带中文和空格。别问我怎么知道的,都是泪。

装好后,打开终端验证一下:

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 工具链 Python 解释器 pip(包管理器) venv(虚拟环境) requirements.txt Node.js 工具链 Node.js 运行时 npm(包管理器) node_modules(本地依赖) package.json + lock

看到没?两套体系的结构几乎一模一样。理解了Python那一套,Node.js这边也就通了。这就是我说的「一通百通」。

好了,环境准备好了,下一章咱们就开始真正动手,看看包依赖到底是怎么管理的。

可可精品资料库