langShift

Python 生态系统入门

从 JavaScript 开发者视角了解 Python 生态系统,掌握 pip、venv、pyenv 等核心工具

1. 引言

为什么 JavaScript 开发者需要学习 Python?

作为前端开发者,你可能已经精通 JavaScript 生态系统,但 Python 正在成为现代开发中不可或缺的技能。以下是学习 Python 的几个重要原因:

  • AI 开发:如训练模型、数据预处理等
  • 数据科学:如数据分析、可视化
  • 自动化工具链:如爬虫、自动办公脚本

最重要的是:Python 是 AI 的第一语言!

2. Python 语言基础

2.1 Python 简介

Python 是由 Guido van Rossum 在 1991 年创建的编程语言,以其简洁的语法和强大的生态系统而闻名。

Python 的设计哲学

# Python 的核心理念:简洁明了
import this
"""
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
"""
# 输出 "The Zen of Python" - Python 的设计哲学
print("The Zen of Python")

与 JavaScript 的核心对比

特性JavaScriptPython说明
类型系统动态类型动态类型两者都支持动态类型,但 Python 有类型注解
执行方式解释型解释型都需要运行时环境
语法风格C 风格缩进敏感Python 使用缩进代替大括号
变量声明let/const/var直接赋值Python 无需声明关键字
字符串单引号/双引号单引号/双引号/三引号Python 支持多行字符串
注释///* */#"""Python 支持文档字符串

代码风格对比示例

// JavaScript 风格
function calculateArea(width, height) {
const area = width * height;
return area;
}
const result = calculateArea(10, 5);
console.log(`面积是: ${result}`);
# Python 风格
def calculate_area(width, height):
area = width * height
return area
result = calculate_area(10, 5)
print(f"面积是: {result}")

2.2 Python 安装和配置

安装方法对比

操作系统JavaScript (Node.js)Python说明
Windows官网下载安装包官网下载安装包两者都有官方安装包
macOSHomebrew: brew install nodeHomebrew: brew install python推荐使用包管理器
Linux包管理器或源码编译包管理器或源码编译系统包管理器优先

验证安装

# JavaScript 环境验证
node --version
npm --version
# Python 环境验证
python --version
# 或
python3 --version
pip --version

环境变量配置

环境变量JavaScriptPython作用
PATHNode.js 安装目录Python 安装目录命令行访问
NODE_PATH全局模块路径PYTHONPATH模块搜索路径
NPM_CONFIGnpm 配置PIP_CONFIG_FILE包管理器配置

3. Python 包管理生态

3.1 pip - Python 的包管理器

pip 是 Python 的官方包管理器,类似于 JavaScript 生态中的 npm 或 yarn。

核心命令对比

功能npm/yarnpip说明
安装包npm install packagepip install package安装单个包
全局安装npm install -g packagepipx run packagepipx 是用于安装和运行 Python CLI 应用的推荐工具,避免污染全局环境。
开发依赖npm install --save-devpip install packagepip 本身不区分依赖类型,但可以通过多个 requirements 文件手动管理开发依赖和生产依赖。
卸载包npm uninstall packagepip uninstall package移除已安装的包
列出包npm listpip list显示已安装的包
更新包npm update packagepip install --upgrade package升级到最新版本

依赖文件对比

// package.json (JavaScript)
{
"name": "my-project",
"version": "1.0.0",
"dependencies": {
"express": "^4.18.2",
"axios": "^1.6.0"
},
"devDependencies": {
"jest": "^29.7.0",
"eslint": "^8.55.0"
},
"scripts": {
"start": "node index.js",
"test": "jest"
}
}
# requirements.txt (Python)
# 核心依赖
Flask==2.3.3
requests==2.31.0
pandas==2.1.4
# 开发依赖(通常放在 requirements-dev.txt)
pytest==7.4.3
black==23.11.0
flake8==6.1.0

实际使用示例

# JavaScript 项目初始化
npm init -y
npm install express axios
npm install --save-dev jest eslint
# Python 项目初始化
pip install Flask requests pandas
pip install pytest black flake8

3.2 虚拟环境管理

3.2.1 venv - Python 内置虚拟环境

虚拟环境是 Python 开发的核心概念,类似于 JavaScript 中的 node_modules 隔离,但更加彻底。

概念对比

概念JavaScriptPython说明
依赖隔离node_modules 目录虚拟环境目录Python 隔离更彻底
全局包npm install -gpip install都支持全局安装
版本管理package.json 锁定requirements.txt依赖版本控制
环境切换自动(基于目录)手动激活/退出Python 需要显式激活

venv 基本操作

# 创建虚拟环境
python -m venv myproject-env
# 激活虚拟环境
# Windows
myproject-env\Scripts\activate
# macOS/Linux
source myproject-env/bin/activate
# 退出虚拟环境
deactivate

项目结构对比

# JavaScript 项目结构
my-js-project/
├── node_modules/ # 依赖包
├── package.json # 项目配置
├── package-lock.json # 依赖锁定
├── src/
│ └── index.js
└── README.md
# Python 项目结构
my-python-project/
├── venv/ # 虚拟环境(通常不提交到版本控制)
├── requirements.txt # 依赖列表
├── src/
│ └── main.py
└── README.md

实际工作流程对比

# JavaScript 工作流程
mkdir my-js-project
cd my-js-project
npm init -y
npm install express
# 开始开发...
# Python 工作流程
mkdir my-python-project
cd my-python-project
python -m venv venv
source venv/bin/activate # 或 venv\Scripts\activate (Windows)
pip install Flask
# 开始开发...

3.2.2 pyenv - Python 版本管理

pyenv 类似于 Node.js 生态中的 nvm,用于管理多个 Python 版本。

版本管理工具对比

功能nvm (Node.js)pyenv (Python)说明
安装版本nvm install 18.17.0pyenv install 3.11.5安装特定版本
切换版本nvm use 18.17.0pyenv global 3.11.5设置默认版本
本地版本.nvmrc 文件.python-version 文件项目级版本控制
列出版本nvm listpyenv versions查看已安装版本
当前版本nvm currentpyenv version显示当前使用的版本

安装和配置 pyenv

# macOS (使用 Homebrew)
brew install pyenv
# Linux
curl https://pyenv.run | bash
# 添加到 shell 配置
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

pyenv 基本使用

# 查看可用的 Python 版本
pyenv install --list
# 安装特定版本
pyenv install 3.11.5
pyenv install 3.10.12
# 设置全局默认版本
pyenv global 3.11.5
# 为特定项目设置版本
cd my-project
pyenv local 3.10.12
# 查看当前版本
pyenv version

项目级版本控制

# 在项目目录中设置 Python 版本
cd my-python-project
pyenv local 3.11.5
# 这会创建 .python-version 文件
cat .python-version
# 输出: 3.11.5
# 创建虚拟环境(使用项目指定的 Python 版本)
python -m venv venv
source venv/bin/activate

最佳实践对比

最佳实践JavaScriptPython原因
版本锁定package-lock.jsonrequirements.txt + 虚拟环境确保环境一致性
依赖管理npm cipip install -r requirements.txt快速安装
开发环境.env 文件.env 文件 + 虚拟环境环境变量管理
CI/CDnpm ci && npm testpip install && pytest自动化测试
部署生产环境安装虚拟环境打包环境隔离

通过以上对比,你可以看到 Python 生态系统虽然概念上与 JavaScript 类似,但在实现细节和最佳实践上有所不同。理解这些差异将帮助你更快地适应 Python 开发环境。

4. 开发工具对比

4.1 代码编辑器/IDE

现代开发中,选择合适的编辑器对提高开发效率至关重要。让我们看看 JavaScript 和 Python 开发中常用的工具。

主流编辑器对比

编辑器JavaScript 支持Python 支持优势特点
VSCode原生支持需要 Python 扩展轻量级,插件丰富
PyCharm需要插件原生支持Python 开发首选
WebStorm原生支持需要插件JavaScript 开发首选
Sublime Text需要插件需要插件快速,轻量级
Vim/Neovim需要配置需要配置高效,可定制性强

VSCode 配置对比

// JavaScript 项目配置 (.vscode/settings.json)
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"eslint.validate": ["javascript", "typescript"],
"typescript.preferences.importModuleSpecifier": "relative"
}
// Python 项目配置 (.vscode/settings.json)
{
"python.defaultInterpreterPath": "./venv/bin/python",
"python.formatting.provider": "black",
"python.linting.enabled": true,
"python.linting.pylintEnabled": false,
"python.linting.flake8Enabled": true,
"editor.formatOnSave": true
}

推荐的 VSCode 扩展

功能JavaScript 扩展Python 扩展说明
语法高亮内置Python基础语法支持
智能提示TypeScriptPylance代码补全和类型检查
代码格式化PrettierBlack统一代码风格
代码检查ESLintFlake8/Ruff代码质量检查
调试Node.js DebuggerPython Debugger断点调试
测试Jest RunnerPython Test Explorer测试运行器

5. 项目结构对比

5.1 Python 项目结构

Python 项目有标准的目录结构,让我们对比 JavaScript 和 Python 的项目组织方式。

标准项目结构对比

目录/文件JavaScript 项目Python 项目说明
配置文件package.jsonpyproject.toml项目元数据和依赖
依赖锁定package-lock.jsonrequirements.txt精确版本控制
源代码src/src/ 或项目根目录主要代码文件
测试文件tests/ 或 test/tests/测试代码
文档docs/docs/项目文档
构建输出dist/build/构建产物
环境配置.env.env(配合 python-dotenv 库)环境变量

典型项目结构示例

# JavaScript 项目结构
my-js-app/
├── package.json # 项目配置
├── package-lock.json # 依赖锁定
├── .eslintrc.js # ESLint 配置
├── .prettierrc # Prettier 配置
├── tsconfig.json # TypeScript 配置
├── src/
│ ├── components/ # React 组件
│ ├── utils/ # 工具函数
│ ├── types/ # TypeScript 类型
│ └── index.ts # 入口文件
├── tests/
│ └── components.test.ts # 测试文件
├── docs/ # 文档
├── dist/ # 构建输出
└── README.md
# Python 项目结构
my-python-app/
├── pyproject.toml # 项目配置
├── requirements.txt # 依赖列表
├── requirements-dev.txt # 开发依赖
├── .flake8 # Flake8 配置
├── .env # 环境变量
├── src/
│ └── my_python_app/ # 包目录
│ ├── __init__.py # 包初始化
│ ├── core/ # 核心模块
│ ├── utils/ # 工具函数
│ └── main.py # 入口文件
├── tests/
│ ├── __init__.py # 测试包初始化
│ ├── test_core.py # 核心测试
│ └── conftest.py # pytest 配置
├── docs/ # 文档
├── build/ # 构建输出
└── README.md

5.2 依赖管理与项目配置

现代 Python 项目正朝着使用单一配置文件 pyproject.toml 的方向发展,这类似于 JavaScript 生态中的 package.json。这个文件可以定义项目元数据、依赖项、以及各种工具(如格式化器、Linter)的配置。

依赖管理工具对比

工具JavaScript 对应特点适用场景
pip + requirements.txtnpm + package.json传统、简单直接遗留项目或小型脚本
PoetryYarn / npmpyproject.toml 驱动,集成依赖、环境和打包管理推荐用于新项目
pip-toolsnpm ci / package-lock.jsonpyproject.toml.in 文件编译 requirements.txt需要精确控制依赖文件
pipenvnpm自动管理虚拟环境和依赖某些工作流中仍在使用

依赖文件格式对比

// package.json (JavaScript)
{
"name": "my-app",
"version": "1.0.0",
"description": "A sample application",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js",
"test": "jest",
"build": "webpack",
"lint": "eslint src/",
"format": "prettier --write src/"
},
"dependencies": {
"express": "^4.18.2",
"axios": "^1.6.0"
},
"devDependencies": {
"jest": "^29.7.0",
"eslint": "^8.55.0",
"prettier": "^3.1.0"
},
"engines": {
"node": ">=18.0.0"
}
}
# pyproject.toml (Python - Poetry)
[tool.poetry]
name = "my-python-app"
version = "0.1.0"
description = "A sample Python application"
authors = ["Your Name <your.email@example.com>"]
readme = "README.md"
packages = [{include = "my_python_app", from = "src"}]
[tool.poetry.dependencies]
python = "^3.8"
flask = "^2.3.3"
requests = "^2.31.0"
[tool.poetry.group.dev.dependencies]
pytest = "^7.4.3"
black = "^23.11.0"
flake8 = "^6.1.0"
[tool.poetry.scripts]
start = "my_python_app.main:main"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

依赖安装和更新对比

# JavaScript 依赖管理
npm install # 安装所有依赖
npm install express # 安装生产依赖
npm install --save-dev jest # 安装开发依赖
npm update # 更新依赖
npm audit # 安全审计
npm outdated # 检查过期依赖
# Python 依赖管理 (pip)
pip install -r requirements.txt # 安装所有依赖
pip install flask # 安装包
pip install pytest --user # 用户级安装
pip install --upgrade flask # 更新包
pip list --outdated # 检查过期依赖
# Python 依赖管理 (Poetry)
poetry install # 安装所有依赖
poetry add flask # 添加生产依赖
poetry add --group dev pytest # 添加开发依赖
poetry update # 更新依赖
poetry show --tree # 显示依赖树

6. 实战练习

6.1 环境搭建练习

让我们通过实际练习来熟悉 Python 开发环境的搭建。

练习 1:创建第一个 Python 项目

# 1. 创建项目目录
mkdir my-first-python-project
cd my-first-python-project
# 2. 使用 pyenv 设置 Python 版本
pyenv local 3.11.5
# 3. 创建虚拟环境
python -m venv venv
# 4. 激活虚拟环境
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
# 5. 安装基础包
pip install requests flask pytest black flake8
# 6. 创建 requirements.txt
pip freeze > requirements.txt

对比:JavaScript 项目创建

# 1. 创建项目目录
mkdir my-first-js-project
cd my-first-js-project
# 2. 初始化 npm 项目
npm init -y
# 3. 安装基础包
npm install express axios
npm install --save-dev jest eslint prettier
# 4. 创建 .gitignore
echo "node_modules/" > .gitignore
echo "dist/" >> .gitignore

练习 2:配置开发环境

# Python 项目配置
# 1. 创建项目结构
mkdir -p src/my_app tests docs
# 2. 创建配置文件
touch pyproject.toml .flake8 .env
# 3. 配置 VSCode
mkdir .vscode
touch .vscode/settings.json .vscode/launch.json
# JavaScript 项目配置
# 1. 创建项目结构
mkdir -p src/components src/utils tests docs
# 2. 创建配置文件
touch .eslintrc.js .prettierrc tsconfig.json
# 3. 配置 VSCode
mkdir .vscode
touch .vscode/settings.json .vscode/launch.json

7. 总结和下一步

7.1 Python 生态系统的核心概念总结

通过本模块的学习,你已经掌握了 Python 生态系统的核心概念:

核心工具对比总结

概念JavaScript 对应Python 工具关键差异
运行时Node.jsPython 解释器Python 需要显式版本管理
包管理器npm/yarnpip/poetryPython 工具链更分散,但 pip 和 poetry 都提供了依赖管理功能
依赖隔离node_modules虚拟环境Python 的虚拟环境完全隔离
版本管理nvmpyenv功能相似,语法不同
代码质量ESLint + PrettierFlake8 + BlackPython 工具更专注

7.2 下一模块预告

在下一个模块中,我们将深入学习 Python 的核心语法,包括:

模块 1:Python 语法基础

  • 变量和数据类型
  • 控制流语句
  • 函数定义和调用
  • 列表、字典、集合操作
  • 文件操作和异常处理

学习目标

  • 掌握 Python 基本语法
  • 理解与 JavaScript 的语法差异
  • 能够编写简单的 Python 程序
  • 为后续学习打下坚实基础

学习资源推荐

资源类型推荐内容适用阶段
官方文档Python 官方教程基础学习
在线课程Real Python, Python.org系统学习
实践平台LeetCode, HackerRank算法练习
开源项目GitHub Python 项目实战经验

恭喜你完成了 Python 生态系统入门的学习!你已经掌握了 Python 开发环境的核心工具和概念。在接下来的学习中,我们将深入 Python 语言的各个方面,帮助你以最快的方式能够读懂 Python 代码。

记住:学习 Python 不是要替代 JavaScript,而是要扩展你的技术栈,让你能够处理更多类型的开发任务。两种语言各有优势,结合使用将让你成为更强大的开发者。