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 的核心对比
特性 | JavaScript | Python | 说明 |
---|---|---|---|
类型系统 | 动态类型 | 动态类型 | 两者都支持动态类型,但 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 * heightreturn arearesult = calculate_area(10, 5)print(f"面积是: {result}")
2.2 Python 安装和配置
安装方法对比
操作系统 | JavaScript (Node.js) | Python | 说明 |
---|---|---|---|
Windows | 官网下载安装包 | 官网下载安装包 | 两者都有官方安装包 |
macOS | Homebrew: brew install node | Homebrew: brew install python | 推荐使用包管理器 |
Linux | 包管理器或源码编译 | 包管理器或源码编译 | 系统包管理器优先 |
验证安装
# JavaScript 环境验证node --versionnpm --version# Python 环境验证python --version# 或python3 --versionpip --version
环境变量配置
环境变量 | JavaScript | Python | 作用 |
---|---|---|---|
PATH | Node.js 安装目录 | Python 安装目录 | 命令行访问 |
NODE_PATH | 全局模块路径 | PYTHONPATH | 模块搜索路径 |
NPM_CONFIG | npm 配置 | PIP_CONFIG_FILE | 包管理器配置 |
3. Python 包管理生态
3.1 pip - Python 的包管理器
pip 是 Python 的官方包管理器,类似于 JavaScript 生态中的 npm 或 yarn。
核心命令对比
功能 | npm/yarn | pip | 说明 |
---|---|---|---|
安装包 | npm install package | pip install package | 安装单个包 |
全局安装 | npm install -g package | pipx run package | pipx 是用于安装和运行 Python CLI 应用的推荐工具,避免污染全局环境。 |
开发依赖 | npm install --save-dev | pip install package | pip 本身不区分依赖类型,但可以通过多个 requirements 文件手动管理开发依赖和生产依赖。 |
卸载包 | npm uninstall package | pip uninstall package | 移除已安装的包 |
列出包 | npm list | pip list | 显示已安装的包 |
更新包 | npm update package | pip 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.3requests==2.31.0pandas==2.1.4# 开发依赖(通常放在 requirements-dev.txt)pytest==7.4.3black==23.11.0flake8==6.1.0
实际使用示例
# JavaScript 项目初始化npm init -ynpm install express axiosnpm install --save-dev jest eslint# Python 项目初始化pip install Flask requests pandaspip install pytest black flake8
3.2 虚拟环境管理
3.2.1 venv - Python 内置虚拟环境
虚拟环境是 Python 开发的核心概念,类似于 JavaScript 中的 node_modules
隔离,但更加彻底。
概念对比
概念 | JavaScript | Python | 说明 |
---|---|---|---|
依赖隔离 | node_modules 目录 | 虚拟环境目录 | Python 隔离更彻底 |
全局包 | npm install -g | pip install | 都支持全局安装 |
版本管理 | package.json 锁定 | requirements.txt | 依赖版本控制 |
环境切换 | 自动(基于目录) | 手动激活/退出 | Python 需要显式激活 |
venv 基本操作
# 创建虚拟环境python -m venv myproject-env# 激活虚拟环境# Windowsmyproject-env\Scripts\activate# macOS/Linuxsource 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-projectcd my-js-projectnpm init -ynpm install express# 开始开发...# Python 工作流程mkdir my-python-projectcd my-python-projectpython -m venv venvsource 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.0 | pyenv install 3.11.5 | 安装特定版本 |
切换版本 | nvm use 18.17.0 | pyenv global 3.11.5 | 设置默认版本 |
本地版本 | .nvmrc 文件 | .python-version 文件 | 项目级版本控制 |
列出版本 | nvm list | pyenv versions | 查看已安装版本 |
当前版本 | nvm current | pyenv version | 显示当前使用的版本 |
安装和配置 pyenv
# macOS (使用 Homebrew)brew install pyenv# Linuxcurl https://pyenv.run | bash# 添加到 shell 配置echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrcecho 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrcecho 'eval "$(pyenv init -)"' >> ~/.zshrc
pyenv 基本使用
# 查看可用的 Python 版本pyenv install --list# 安装特定版本pyenv install 3.11.5pyenv install 3.10.12# 设置全局默认版本pyenv global 3.11.5# 为特定项目设置版本cd my-projectpyenv local 3.10.12# 查看当前版本pyenv version
项目级版本控制
# 在项目目录中设置 Python 版本cd my-python-projectpyenv local 3.11.5# 这会创建 .python-version 文件cat .python-version# 输出: 3.11.5# 创建虚拟环境(使用项目指定的 Python 版本)python -m venv venvsource venv/bin/activate
最佳实践对比
最佳实践 | JavaScript | Python | 原因 |
---|---|---|---|
版本锁定 | package-lock.json | requirements.txt + 虚拟环境 | 确保环境一致性 |
依赖管理 | npm ci | pip install -r requirements.txt | 快速安装 |
开发环境 | .env 文件 | .env 文件 + 虚拟环境 | 环境变量管理 |
CI/CD | npm ci && npm test | pip 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 | 基础语法支持 |
智能提示 | TypeScript | Pylance | 代码补全和类型检查 |
代码格式化 | Prettier | Black | 统一代码风格 |
代码检查 | ESLint | Flake8/Ruff | 代码质量检查 |
调试 | Node.js Debugger | Python Debugger | 断点调试 |
测试 | Jest Runner | Python Test Explorer | 测试运行器 |
5. 项目结构对比
5.1 Python 项目结构
Python 项目有标准的目录结构,让我们对比 JavaScript 和 Python 的项目组织方式。
标准项目结构对比
目录/文件 | JavaScript 项目 | Python 项目 | 说明 |
---|---|---|---|
配置文件 | package.json | pyproject.toml | 项目元数据和依赖 |
依赖锁定 | package-lock.json | requirements.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.txt | npm + package.json | 传统、简单直接 | 遗留项目或小型脚本 |
Poetry | Yarn / npm | pyproject.toml 驱动,集成依赖、环境和打包管理 | 推荐用于新项目 |
pip-tools | npm ci / package-lock.json | 从 pyproject.toml 或 .in 文件编译 requirements.txt | 需要精确控制依赖文件 |
pipenv | npm | 自动管理虚拟环境和依赖 | 某些工作流中仍在使用 |
依赖文件格式对比
// 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-projectcd my-first-python-project# 2. 使用 pyenv 设置 Python 版本pyenv local 3.11.5# 3. 创建虚拟环境python -m venv venv# 4. 激活虚拟环境# Windowsvenv\Scripts\activate# macOS/Linuxsource venv/bin/activate# 5. 安装基础包pip install requests flask pytest black flake8# 6. 创建 requirements.txtpip freeze > requirements.txt
对比:JavaScript 项目创建
# 1. 创建项目目录mkdir my-first-js-projectcd my-first-js-project# 2. 初始化 npm 项目npm init -y# 3. 安装基础包npm install express axiosnpm install --save-dev jest eslint prettier# 4. 创建 .gitignoreecho "node_modules/" > .gitignoreecho "dist/" >> .gitignore
练习 2:配置开发环境
# Python 项目配置# 1. 创建项目结构mkdir -p src/my_app tests docs# 2. 创建配置文件touch pyproject.toml .flake8 .env# 3. 配置 VSCodemkdir .vscodetouch .vscode/settings.json .vscode/launch.json
# JavaScript 项目配置# 1. 创建项目结构mkdir -p src/components src/utils tests docs# 2. 创建配置文件touch .eslintrc.js .prettierrc tsconfig.json# 3. 配置 VSCodemkdir .vscodetouch .vscode/settings.json .vscode/launch.json
7. 总结和下一步
7.1 Python 生态系统的核心概念总结
通过本模块的学习,你已经掌握了 Python 生态系统的核心概念:
核心工具对比总结
概念 | JavaScript 对应 | Python 工具 | 关键差异 |
---|---|---|---|
运行时 | Node.js | Python 解释器 | Python 需要显式版本管理 |
包管理器 | npm/yarn | pip/poetry | Python 工具链更分散,但 pip 和 poetry 都提供了依赖管理功能 |
依赖隔离 | node_modules | 虚拟环境 | Python 的虚拟环境完全隔离 |
版本管理 | nvm | pyenv | 功能相似,语法不同 |
代码质量 | ESLint + Prettier | Flake8 + Black | Python 工具更专注 |
7.2 下一模块预告
在下一个模块中,我们将深入学习 Python 的核心语法,包括:
模块 1:Python 语法基础
- 变量和数据类型
- 控制流语句
- 函数定义和调用
- 列表、字典、集合操作
- 文件操作和异常处理
学习目标
- 掌握 Python 基本语法
- 理解与 JavaScript 的语法差异
- 能够编写简单的 Python 程序
- 为后续学习打下坚实基础
学习资源推荐
资源类型 | 推荐内容 | 适用阶段 |
---|---|---|
官方文档 | Python 官方教程 | 基础学习 |
在线课程 | Real Python, Python.org | 系统学习 |
实践平台 | LeetCode, HackerRank | 算法练习 |
开源项目 | GitHub Python 项目 | 实战经验 |
恭喜你完成了 Python 生态系统入门的学习!你已经掌握了 Python 开发环境的核心工具和概念。在接下来的学习中,我们将深入 Python 语言的各个方面,帮助你以最快的方式能够读懂 Python 代码。
记住:学习 Python 不是要替代 JavaScript,而是要扩展你的技术栈,让你能够处理更多类型的开发任务。两种语言各有优势,结合使用将让你成为更强大的开发者。