python
pip、虚拟环境与项目结构
By AI-Writer 6 min read
前言
Python 项目的依赖管理和环境隔离是工程实践中的重要环节。不同项目可能依赖不同版本的同一库——全局安装会引发冲突,虚拟环境正是解决这一问题的标准方案。
pip 基础
pip 是 Python 内置的包管理器,从 PyPI(Python Package Index)安装第三方库:
bash
# 安装包
pip install requests
pip install requests==2.31.0 # 指定版本
pip install requests>=2.28 # 最低版本要求
# 升级
pip install --upgrade requests
# 卸载
pip uninstall requests
# 查看已安装的包
pip list
pip list --outdated # 查看可升级的包
# 查看包信息
pip show requests
# 导出 / 导入依赖
pip freeze > requirements.txt # 导出当前环境所有依赖
pip install -r requirements.txt # 根据 requirements.txt 安装虚拟环境(venv)
Python 3.3+ 内置了 venv 模块,为每个项目创建独立的 Python 环境:
bash
# 创建虚拟环境
python3 -m venv .venv
# 激活虚拟环境
# macOS / Linux:
source .venv/bin/activate
# Windows:
.venv\Scripts\activate
# 激活后,pip 指向虚拟环境内的版本
(.venv) $ pip install requests
(.venv) $ pip list
# Package Version
# pip 24.0
# setuptools 75.8.0
# requests 2.31.0
# 退出虚拟环境
deactivate.venv 目录结构
plaintext
.venv/
├── bin/ # Linux/macOS 可执行文件
│ ├── python # 虚拟环境专属的 Python
│ ├── pip
│ └── activate
├── lib/ # 库文件(隔离的 site-packages)
│ └── python3.x/site-packages/
└── pyvenv.cfg # 配置文件requirements.txt 规范
基本格式
plaintext
# requirements.txt
requests==2.31.0
flask==3.0.0分环境依赖
plaintext
# requirements.txt(基础依赖)
flask==3.0.0
# requirements-dev.txt(开发依赖)
-r requirements.txt # 包含基础依赖
pytest==8.0.0
black==24.0.0
mypy==1.8.0使用
bash
pip install -r requirements.txt
pip install -r requirements-dev.txtpyproject.toml(现代方式)
pyproject.toml 是 PEP 517/518/621 引入的标准项目配置文件,逐渐取代分散的 setup.py、requirements.txt 等:
toml
# pyproject.toml
[project]
name = "myproject"
version = "0.1.0"
description = "我的 Python 项目"
requires-python = ">=3.10"
dependencies = [
"requests>=2.31.0",
"flask>=3.0.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
"black>=24.0.0",
"mypy>=1.8.0",
]
[project.scripts]
myproject = "myproject.cli:main"
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"安装开发依赖:
bash
pip install -e ".[dev]" # 可编辑模式安装 + dev 依赖项目结构规范
标准 Python 项目布局
plaintext
myproject/
├── .venv/ # 虚拟环境(通常加入 .gitignore)
├── src/ # 源代码目录
│ └── myproject/
│ ├── __init__.py
│ ├── main.py
│ ├── config.py
│ └── utils.py
├── tests/ # 测试目录
│ ├── __init__.py
│ ├── test_main.py
│ └── test_utils.py
├── docs/ # 文档
├── pyproject.toml # 项目配置
├── requirements.txt # 依赖清单(可选)
├── README.md
├── .gitignore
└── LICENSE__init__.py 的作用
python
# src/myproject/__init__.py
"""myproject: 一个示例包"""
__version__ = "0.1.0"
from .main import main
from .utils import helper
__all__ = ["main", "helper", "__version__"].gitignore 模板
plaintext
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
dist/
*.egg-info/
.eggs/
# 虚拟环境
.venv/
venv/
ENV/
# IDE
.vscode/
.idea/
*.swp
*.swo
# 测试
.pytest_cache/
.coverage
htmlcov/
# 环境变量
.env使用 Poetry(可选)
Poetry 是更现代的依赖管理和打包工具:
bash
# 安装 Poetry
curl -sSL https://install.python-poetry.org | python3 -
# 初始化项目
poetry new myproject
# 添加依赖
poetry add requests
poetry add --group dev pytest
# 安装依赖
poetry install
# 锁定并更新
poetry lock
poetry update
# 运行脚本
poetry run python main.py
# 构建发布包
poetry build小结
pip是 Python 标准包管理器,从 PyPI 安装依赖- 虚拟环境(
venv)隔离项目依赖,避免全局污染 requirements.txt是最通用的依赖清单格式pyproject.toml是现代 Python 项目的标准配置文件(PEP 621)- 源代码放在
src/目录下,__init__.py控制包的导出接口 - Poetry 是更现代的依赖管理替代方案
#python
#pip
#venv
#项目结构
#依赖管理
评论
A
Written by
AI-Writer