学习目标
通过本章学习,你将掌握: - Python的安装和配置 - 虚拟环境的创建和管理 - 包管理工具的使用 - 开发工具的选择和配置 - 调试和测试工具的使用
2.1 Python安装
Windows系统安装
方法一:官网下载安装
- 访问Python官网
- 下载最新版本的Python安装包
- 运行安装程序,重要:勾选”Add Python to PATH”
- 选择”Install Now”或”Customize installation”
# 验证安装
python --version
pip --version
# 给默认别名
alias python=python3
方法二:Microsoft Store安装
- 打开Microsoft Store
- 搜索”Python”
- 选择最新版本安装
方法三:Chocolatey安装
# 安装Chocolatey(如果未安装)
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# 安装Python
choco install python
macOS系统安装
方法一:官网下载安装
- 访问Python官网
- 下载macOS版本
- 运行.pkg安装包
方法二:Homebrew安装
# 安装Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装Python
brew install python
# 验证安装
python3 --version
pip3 --version
# 给默认别名
alias python=python3
Linux系统安装
Ubuntu/Debian
# 更新包列表
apt update
# 安装Python 3
apt install -y python3 python3-pip python3-venv
# 验证安装
python3 --version
pip3 --version
CentOS/RHEL/Fedora
# CentOS/RHEL
yum install python3 python3-pip
# Fedora
dnf install python3 python3-pip
# 验证安装
python3 --version
pip3 --version
# 给默认别名
alias python=python3
从源码编译安装
# 安装依赖
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev
# 下载Python源码
wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar -xf Python-3.11.0.tgz
cd Python-3.11.0
# 配置和编译
./configure --enable-optimizations
make -j 8
sudo make altinstall
2.2 虚拟环境管理
为什么需要虚拟环境
- 依赖隔离:不同项目使用不同版本的包
- 避免冲突:防止包版本冲突
- 环境复现:便于在不同机器上复现环境
- 权限管理:避免全局安装包的权限问题
venv(推荐)
venv是Python 3.3+内置的虚拟环境工具:
# 创建虚拟环境
python -m venv myproject_env
# Windows激活
myproject_env\Scripts\activate
# macOS/Linux激活
source myproject_env/bin/activate
# 验证虚拟环境
which python
python --version
# 安装包
pip install requests numpy pandas
# 查看已安装包
pip list
# 生成依赖文件
pip freeze > requirements.txt
# 从依赖文件安装
pip install -r requirements.txt
# 退出虚拟环境
deactivate
virtualenv
virtualenv是第三方虚拟环境工具,功能更强大:
# 安装virtualenv
pip install virtualenv
# 创建虚拟环境
virtualenv myproject_env
# 指定Python版本
virtualenv -p python3.9 myproject_env
# 激活和使用(同venv)
source myproject_env/bin/activate # macOS/Linux
myproject_env\Scripts\activate # Windows
conda
conda是Anaconda/Miniconda的包和环境管理器:
# 创建环境
conda create -n myproject python=3.9
# 激活环境
conda activate myproject
# 安装包
conda install numpy pandas matplotlib
conda install -c conda-forge requests
# 列出环境
conda env list
# 导出环境
conda env export > environment.yml
# 从文件创建环境
conda env create -f environment.yml
# 删除环境
conda env remove -n myproject
# 退出环境
conda deactivate
pipenv
pipenv结合了pip和virtualenv的功能:
# 安装pipenv
pip install pipenv
# 创建项目和虚拟环境
mkdir myproject
cd myproject
pipenv install
# 安装包
pipenv install requests
pipenv install pytest --dev # 开发依赖
# 激活shell
pipenv shell
# 运行命令
pipenv run python script.py
# 查看依赖图
pipenv graph
# 检查安全漏洞
pipenv check
poetry
poetry是现代Python依赖管理工具:
# 安装poetry
curl -sSL https://install.python-poetry.org | python3 -
# 创建新项目
poetry new myproject
cd myproject
# 初始化现有项目
poetry init
# 添加依赖
poetry add requests
poetry add pytest --group dev
# 安装依赖
poetry install
# 激活虚拟环境
poetry shell
# 运行命令
poetry run python script.py
# 构建包
poetry build
# 发布包
poetry publish
2.3 包管理工具
pip基础使用
# 安装包
pip install package_name
pip install package_name==1.2.3 # 指定版本
pip install package_name>=1.2.0 # 版本范围
# 从文件安装
pip install -r requirements.txt
# 升级包
pip install --upgrade package_name
pip install -U package_name
# 卸载包
pip uninstall package_name
# 查看包信息
pip show package_name
# 列出已安装包
pip list
pip list --outdated # 显示过期包
# 搜索包
pip search keyword
# 下载包(不安装)
pip download package_name
# 从本地安装
pip install ./package_directory
pip install package.whl
pip配置
配置文件位置
- Windows:
%APPDATA%\pip\pip.ini
- macOS:
$HOME/.pip/pip.conf
- Linux:
$HOME/.pip/pip.conf
配置国内镜像源
# pip.conf / pip.ini
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
临时使用镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package_name
常用镜像源
- 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
- 阿里云:https://mirrors.aliyun.com/pypi/simple
- 中科大:https://pypi.mirrors.ustc.edu.cn/simple
- 豆瓣:https://pypi.douban.com/simple
2.4 开发工具选择
PyCharm
特点
- 功能强大的专业IDE
- 智能代码补全和错误检测
- 强大的调试功能
- 集成版本控制
- 数据库工具
安装和配置
# 下载安装
# 访问 https://www.jetbrains.com/pycharm/
# 选择Community(免费)或Professional版本
# 基本配置
# 1. 设置Python解释器
# 2. 配置代码风格
# 3. 安装插件
# 4. 设置快捷键
常用快捷键
Ctrl + Space # 代码补全
Ctrl + / # 注释/取消注释
Ctrl + D # 复制行
Ctrl + Y # 删除行
F5 # 运行
Shift + F10 # 运行当前文件
Ctrl + Shift + F10 # 运行选中代码
Visual Studio Code
特点
- 轻量级,启动快速
- 丰富的插件生态
- 优秀的Git集成
- 跨平台支持
- 免费开源
Python扩展安装
# 必装扩展
# 1. Python (Microsoft)
# 2. Pylance (Microsoft)
# 3. Python Docstring Generator
# 4. autoDocstring
# 5. Python Test Explorer
配置文件示例
// settings.json
{
"python.defaultInterpreterPath": "./venv/bin/python",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.formatting.provider": "black",
"python.testing.pytestEnabled": true,
"editor.formatOnSave": true,
"editor.rulers": [79],
"files.trimTrailingWhitespace": true
}
Jupyter Notebook/Lab
特点
- 交互式开发环境
- 支持代码、文档、可视化混合
- 适合数据分析和机器学习
- 支持多种编程语言
安装和使用
# 安装Jupyter
pip install jupyter
# 启动Notebook
jupyter notebook
# 安装JupyterLab
pip install jupyterlab
# 启动JupyterLab
jupyter lab
# 安装扩展
jupyter labextension install @jupyterlab/toc
常用快捷键
Shift + Enter # 运行单元格并移到下一个
Ctrl + Enter # 运行单元格
A # 在上方插入单元格
B # 在下方插入单元格
DD # 删除单元格
M # 转换为Markdown
Y # 转换为代码
Sublime Text
特点
- 轻量快速
- 强大的搜索功能
- 多光标编辑
- 丰富的插件
Python配置
// Python.sublime-settings
{
"auto_complete": true,
"auto_complete_selector": "source.python",
"word_wrap": true,
"rulers": [79],
"translate_tabs_to_spaces": true,
"tab_size": 4
}
Vim/Neovim
Python插件推荐
" .vimrc配置
Plug 'davidhalter/jedi-vim' " 代码补全
Plug 'nvie/vim-flake8' " 代码检查
Plug 'vim-scripts/indentpython.vim' " Python缩进
Plug 'scrooloose/syntastic' " 语法检查
Plug 'klen/python-mode' " Python模式
2.5 代码质量工具
代码格式化工具
Black
# 安装
pip install black
# 格式化文件
black script.py
# 格式化目录
black src/
# 检查但不修改
black --check script.py
# 显示差异
black --diff script.py
# 配置文件 pyproject.toml
[tool.black]
line-length = 88
target-version = ['py38']
include = '\.pyi?$'
exclude = '''
(
/(
\.eggs
| \.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| _build
| buck-out
| build
| dist
)/
)
'''
autopep8
# 安装
pip install autopep8
# 格式化文件
autopep8 --in-place --aggressive --aggressive script.py
# 格式化目录
autopep8 --in-place --recursive --aggressive src/
yapf
# 安装
pip install yapf
# 格式化文件
yapf -i script.py
# 使用Google风格
yapf --style=google -i script.py
代码检查工具
flake8
# 安装
pip install flake8
# 检查文件
flake8 script.py
# 检查目录
flake8 src/
# 配置文件 .flake8
[flake8]
max-line-length = 88
ignore = E203, E266, E501, W503
max-complexity = 10
select = B,C,E,F,W,T4,B9
pylint
# 安装
pip install pylint
# 检查文件
pylint script.py
# 生成配置文件
pylint --generate-rcfile > .pylintrc
# 禁用特定警告
pylint --disable=C0103,R0903 script.py
mypy(类型检查)
# 安装
pip install mypy
# 类型检查
mypy script.py
# 配置文件 mypy.ini
[mypy]
python_version = 3.8
warn_return_any = True
warn_unused_configs = True
disallow_untyped_defs = True
代码复杂度分析
radon
# 安装
pip install radon
# 圈复杂度分析
radon cc src/ -a
# 原始指标
radon raw src/
# 可维护性指数
radon mi src/
2.6 调试工具
内置调试器pdb
# debug_example.py
import pdb
def calculate_sum(numbers):
total = 0
for num in numbers:
pdb.set_trace() # 设置断点
total += num
return total
numbers = [1, 2, 3, 4, 5]
result = calculate_sum(numbers)
print(f"Sum: {result}")
# 运行调试
python debug_example.py
# pdb命令
# n (next) - 下一行
# s (step) - 进入函数
# c (continue) - 继续执行
# l (list) - 显示代码
# p variable - 打印变量
# pp variable - 美化打印
# h (help) - 帮助
# q (quit) - 退出
ipdb(增强版pdb)
# 安装
pip install ipdb
# 使用
import ipdb; ipdb.set_trace()
IDE调试
PyCharm调试
- 设置断点(点击行号)
- 右键选择”Debug”
- 使用调试控制台
VS Code调试
// launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
2.7 测试工具
unittest(内置)
# test_calculator.py
import unittest
class Calculator:
def add(self, a, b):
return a + b
def divide(self, a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
class TestCalculator(unittest.TestCase):
def setUp(self):
self.calc = Calculator()
def test_add(self):
result = self.calc.add(2, 3)
self.assertEqual(result, 5)
def test_divide(self):
result = self.calc.divide(10, 2)
self.assertEqual(result, 5.0)
def test_divide_by_zero(self):
with self.assertRaises(ValueError):
self.calc.divide(10, 0)
if __name__ == '__main__':
unittest.main()
# 运行测试
python test_calculator.py
# 详细输出
python -m unittest -v test_calculator
# 运行特定测试
python -m unittest test_calculator.TestCalculator.test_add
pytest
# 安装
pip install pytest
# 创建测试文件
# test_calculator_pytest.py
def test_add():
calc = Calculator()
assert calc.add(2, 3) == 5
def test_divide():
calc = Calculator()
assert calc.divide(10, 2) == 5.0
def test_divide_by_zero():
calc = Calculator()
with pytest.raises(ValueError):
calc.divide(10, 0)
# 运行测试
pytest
pytest -v # 详细输出
pytest test_calculator_pytest.py # 运行特定文件
pytest -k "test_add" # 运行匹配的测试
# 生成覆盖率报告
pip install pytest-cov
pytest --cov=calculator --cov-report=html
性能测试
timeit
import timeit
# 测试代码执行时间
code = """
sum([1, 2, 3, 4, 5])
"""
time_taken = timeit.timeit(code, number=100000)
print(f"Time taken: {time_taken:.6f} seconds")
# 比较不同实现
setup = "numbers = list(range(1000))"
time1 = timeit.timeit('sum(numbers)', setup=setup, number=10000)
time2 = timeit.timeit('sum(x for x in numbers)', setup=setup, number=10000)
print(f"sum(numbers): {time1:.6f}")
print(f"sum(generator): {time2:.6f}")
cProfile
# profile_example.py
import cProfile
import pstats
def slow_function():
total = 0
for i in range(1000000):
total += i * i
return total
def main():
result = slow_function()
print(f"Result: {result}")
if __name__ == '__main__':
# 性能分析
cProfile.run('main()', 'profile_stats')
# 查看统计信息
stats = pstats.Stats('profile_stats')
stats.sort_stats('cumulative')
stats.print_stats(10)
# 命令行使用
python -m cProfile -s cumulative profile_example.py
2.8 项目模板和脚手架
cookiecutter
# 安装
pip install cookiecutter
# 使用模板创建项目
cookiecutter https://github.com/audreyfeldroy/cookiecutter-pypackage
# 本地模板
cookiecutter /path/to/template
# 常用模板
cookiecutter https://github.com/drivendata/cookiecutter-data-science
cookiecutter https://github.com/wemake-services/wemake-django-template
项目结构示例
myproject/
├── README.md
├── requirements.txt
├── setup.py
├── .gitignore
├── .flake8
├── pyproject.toml
├── src/
│ └── myproject/
│ ├── __init__.py
│ ├── main.py
│ └── utils.py
├── tests/
│ ├── __init__.py
│ ├── test_main.py
│ └── test_utils.py
├── docs/
│ ├── conf.py
│ └── index.rst
└── scripts/
└── run.py
本章小结
本章我们学习了:
- Python安装:掌握了在不同操作系统上安装Python的方法
- 虚拟环境:学会了使用venv、conda、pipenv等工具管理虚拟环境
- 包管理:熟悉了pip的使用和配置,了解了国内镜像源
- 开发工具:比较了PyCharm、VS Code、Jupyter等开发环境
- 代码质量:学习了Black、flake8、pylint等代码质量工具
- 调试测试:掌握了pdb调试和unittest、pytest测试框架
- 项目管理:了解了项目结构和脚手架工具
下一章预告
下一章我们将学习《基本语法》,内容包括: - 变量和数据类型 - 运算符和表达式 - 输入输出操作 - 字符串处理 - 注释和文档
练习题
基础练习
环境搭建:
- 安装Python 3.9+
- 创建虚拟环境
- 安装常用包(requests, numpy, pandas)
工具配置:
- 配置你选择的IDE
- 设置代码格式化工具
- 配置pip国内镜像源
进阶练习
项目初始化:
- 创建一个新的Python项目
- 设置虚拟环境
- 创建requirements.txt
- 编写简单的测试用例
代码质量检查:
- 使用flake8检查代码
- 使用black格式化代码
- 运行测试并生成覆盖率报告
实战练习
- 开发环境对比:
- 分别在PyCharm和VS Code中开发同一个小项目
- 比较两者的优缺点
- 记录你的使用体验
提示:建立良好的开发环境是高效编程的基础,花时间配置好工具链会让后续开发事半功倍。