学习目标

通过本章学习,你将掌握: - Python的安装和配置 - 虚拟环境的创建和管理 - 包管理工具的使用 - 开发工具的选择和配置 - 调试和测试工具的使用

2.1 Python安装

Windows系统安装

方法一:官网下载安装

  1. 访问Python官网
  2. 下载最新版本的Python安装包
  3. 运行安装程序,重要:勾选”Add Python to PATH”
  4. 选择”Install Now”或”Customize installation”
# 验证安装
python --version
pip --version
# 给默认别名
alias python=python3

方法二:Microsoft Store安装

  1. 打开Microsoft Store
  2. 搜索”Python”
  3. 选择最新版本安装

方法三: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系统安装

方法一:官网下载安装

  1. 访问Python官网
  2. 下载macOS版本
  3. 运行.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 虚拟环境管理

为什么需要虚拟环境

  1. 依赖隔离:不同项目使用不同版本的包
  2. 避免冲突:防止包版本冲突
  3. 环境复现:便于在不同机器上复现环境
  4. 权限管理:避免全局安装包的权限问题

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

常用镜像源

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调试

  1. 设置断点(点击行号)
  2. 右键选择”Debug”
  3. 使用调试控制台

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

本章小结

本章我们学习了:

  1. Python安装:掌握了在不同操作系统上安装Python的方法
  2. 虚拟环境:学会了使用venv、conda、pipenv等工具管理虚拟环境
  3. 包管理:熟悉了pip的使用和配置,了解了国内镜像源
  4. 开发工具:比较了PyCharm、VS Code、Jupyter等开发环境
  5. 代码质量:学习了Black、flake8、pylint等代码质量工具
  6. 调试测试:掌握了pdb调试和unittest、pytest测试框架
  7. 项目管理:了解了项目结构和脚手架工具

下一章预告

下一章我们将学习《基本语法》,内容包括: - 变量和数据类型 - 运算符和表达式 - 输入输出操作 - 字符串处理 - 注释和文档

练习题

基础练习

  1. 环境搭建

    • 安装Python 3.9+
    • 创建虚拟环境
    • 安装常用包(requests, numpy, pandas)
  2. 工具配置

    • 配置你选择的IDE
    • 设置代码格式化工具
    • 配置pip国内镜像源

进阶练习

  1. 项目初始化

    • 创建一个新的Python项目
    • 设置虚拟环境
    • 创建requirements.txt
    • 编写简单的测试用例
  2. 代码质量检查

    • 使用flake8检查代码
    • 使用black格式化代码
    • 运行测试并生成覆盖率报告

实战练习

  1. 开发环境对比
    • 分别在PyCharm和VS Code中开发同一个小项目
    • 比较两者的优缺点
    • 记录你的使用体验

提示:建立良好的开发环境是高效编程的基础,花时间配置好工具链会让后续开发事半功倍。