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.txt

pyproject.toml(现代方式)

pyproject.toml 是 PEP 517/518/621 引入的标准项目配置文件,逐渐取代分散的 setup.pyrequirements.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

Related Articles

python
#8

模块与包管理

详解 Python 的 import 机制、自定义模块、__name__ == "__main__"、包结构、相对导入与绝对导入

Read More