0%

已完成 0/14 关

教学模式

你可以随时调整。

此设置调整教师的教学方式,无需重新生成课程。

第 14 关 含代码 约 21 分钟

虚拟环境包管理与综合实战

终极进阶:告别依赖冲突的虚拟环境

当你在电脑上开发了多个不同的 Python 项目时,很快会遇到一个令人头疼的现实问题:

  • 项目 A 是一个老系统,依赖某个第三方库的 1.0 版本;
  • 项目 B 是一个全新的项目,必须使用该第三方库的 2.0 最新版本;
  • 如果你把所有的包都全局安装在操作系统的系统 Python 中,两个项目就会发生激烈的版本冲突!

为了让每个项目拥有自己专属、干净且互不干扰的独立运行空间,Python 官方在第 12 章给出了现代 Python 开发的标配方案——虚拟环境(Virtual Environments)与包管理(pip)。

1. 什么是虚拟环境?

**虚拟环境(Virtual Environment)**本质上是一个自包含的独立目录树。这个目录里包含了一套特定版本的 Python 解释器二进制副本,以及该项目专属的 site-packages 依赖目录。

在虚拟环境中安装或卸载任何第三方库,都只影响该目录自身,绝对不会对全局系统或其他项目造成任何污染。

2. 创建与管理虚拟环境:venv 模块

Python 标准库内置了 venv 模块,创建虚拟环境极为简单:

在你的项目根目录下打开终端,运行命令:

python3 -m venv .venv

(在 Windows 机器上可执行 py -m venv .venv)

这行命令会在当前目录下自动生成一个名为 .venv 的文件夹,里面已经准备好了专属的 Python 运行环境。

激活虚拟环境(Activation)

创建好之后,你需要“激活”它,通知当前终端会话使用该目录下的 Python 解释器:

  • Windows 系统:
    • 如果使用命令提示符(CMD):
      .venv\Scripts\activate.bat
    • 如果使用 PowerShell:
      .venv\Scripts\Activate.ps1
  • macOS / Linux 系统:
    source .venv/bin/activate

激活成功后,你的终端命令行最左侧会出现括号提示符 (.venv),例如:

(.venv) $

这表明当前终端里执行的所有 python 和 pip 命令都已经绑定到了该独立环境中!

退出虚拟环境

如果你完成了该项目的工作,想回到普通全局系统环境,只需在终端中敲入一行命令:

deactivate

3. 使用 pip 管理包(Package Management)

pip 是 Python 官方钦定的包管理器,它负责从 Python 官方包索引中心 PyPI(Python Package Index, https://pypi.org/) 下载并安装全球开发者贡献的成千上万个强大库。

在已激活的虚拟环境中,常用 pip 命令包括:

  • 安装最新版第三方包:
    pip install requests
  • 安装指定版本的包:
    pip install requests==2.32.0
  • 升级已安装的包:
    pip install --upgrade requests
  • 查看当前环境中安装的所有包:
    pip list
  • 冻结并导出依赖清单到文件:
    pip freeze > requirements.txt
  • 在另一台电脑上一键还原安装所有依赖:
    pip install -r requirements.txt

有了 requirements.txt,你的项目就可以轻松交付给任何团队成员或部署到云端服务器。

4. 终极实战:一个完整的文本分析与处理小脚本

恭喜你!到这里,你已经完整学过了 Python 官方教程从第 1 章到第 12 章的全部核心脉络!

现在,让我们把全套知识体系熔铸在一起,写出一个真正独立、工业级稳健的文本分析与处理小脚本。你可以在 public/activities/text_analyzer.py 查阅和运行它:

"""Python 官方教程第 1 至 12 章综合实战脚本:文本分析与统计

演示全教程核心功能串联:
1. 模块与入口守护 (__name__ == '__main__')
2. 函数定义与文档字符串 (def, docstring, 默认参数)
3. 丰富数据结构运用 (字符串清洗、列表收集、字典词频统计)
4. 稳健异常处理 (try...except FileNotFoundError, OSError)
5. 文件输入与输出 (with open(..., 'r'/'w', encoding='utf-8'))
6. 标准库实用模块 (sys.argv, os.path)
"""

import sys
import os

def clean_word(token):
    """去除单词周围的标点符号并转为小写。"""
    return token.strip(".,!?;:\"'()[]{}").lower()

def count_word_frequencies(words):
    """使用字典整理并统计各个单词出现的频次。"""
    freq_map = {}
    for word in words:
        if not word:
            continue
        freq_map[word] = freq_map.get(word, 0) + 1
    return freq_map

def filter_by_min_length(freq_map, min_len=4):
    """筛选出长度大于等于 min_len 的单词列表,并按频次降序排序。"""
    filtered = []
    for word, count in freq_map.items():
        if len(word) >= min_len:
            filtered.append((word, count))
    
    # 按照出现频次从高到低排序 (使用 lambda)
    filtered.sort(key=lambda item: item[1], reverse=True)
    return filtered

def process_text_file(input_path, output_path, min_len=4):
    """读取文本文件,整理统计词频,将长单词高频词结果写入目标文件。"""
    try:
        with open(input_path, 'r', encoding='utf-8') as f:
            content = f.read()
    except FileNotFoundError:
        print(f"[错误] 无法找到输入文件: {input_path}")
        return False
    except OSError as err:
        print(f"[系统错误] 读取文件失败: {err}")
        return False

    raw_tokens = content.split()
    cleaned_words = [clean_word(t) for t in raw_tokens]
    freq = count_word_frequencies(cleaned_words)
    top_words = filter_by_min_length(freq, min_len=min_len)

    try:
        with open(output_path, 'w', encoding='utf-8') as f:
            f.write(f"=== 文本词频分析报告 (总词数: {len(cleaned_words)}) ===\n")
            f.write(f"长度 >= {min_len} 的单词统计如下:\n")
            for word, count in top_words:
                f.write(f"{word}: {count} 次\n")
        print(f"[成功] 分析报告已保存到: {output_path}")
        return True
    except OSError as err:
        print(f"[系统错误] 写入报告失败: {err}")
        return False

if __name__ == '__main__':
    # 自动生成样例文本用于演示
    sample_filename = "sample.txt"
    output_filename = "report.txt"

    sample_content = (
        "Python is an easy to learn, powerful programming language. "
        "It has efficient high-level data structures and a simple but effective approach to object-oriented programming. "
        "Python's elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language "
        "for scripting and rapid application development in many areas on most platforms."
    )

    with open(sample_filename, 'w', encoding='utf-8') as f:
        f.write(sample_content)

    print("已生成样例文件,开始执行文本分析...")
    success = process_text_file(sample_filename, output_filename, min_len=4)
    if success and os.path.exists(output_filename):
        with open(output_filename, 'r', encoding='utf-8') as f:
            print("\n" + f.read())

运行体验:

在你的虚拟环境中运行:

python text_analyzer.py

终端会给出工整的输出报告:

已生成样例文件,开始执行文本分析...
[成功] 分析报告已保存到: report.txt

=== 文本词频分析报告 (总词数: 44) ===
长度 >= 4 的单词统计如下:
python: 2 次
language: 2 次
easy: 1 次
learn: 1 次
powerful: 1 次
programming: 2 次
...

你可以尝试给它传入一个不存在的文件名,亲眼见证 FileNotFoundError 是如何被我们优雅捕获而不让程序崩溃的!

5. 接下来去哪里?(Chapter 13 展望)

官方教程在第 13 章为学完基础的读者指明了后续探索的方向:

  1. 查阅标准库参考文档(The Python Standard Library Reference):教程只介绍了冰山一角,官方标准库参考提供了每一个内置模块与函数的权威详尽规范;
  2. 探索 PyPI 第三方生态:访问 https://pypi.org/,无论你想做 Web 开发(Django、FastAPI)、数据科学与机器学习(NumPy、Pandas、PyTorch)、自动化运维还是爬虫,这里有全球最活跃的开源轮子供你驰骋;
  3. 精读 Python 语言参考手册(The Python Language Reference):如果你想更深入地探究 Python 的底层语义与正规语言定义;
  4. 实践是唯一的导师:拿起 Python,动手为你自己的日常工作写一个小小的自动化脚本吧!

祝贺你,你已经完成了 Python 官方教程全部核心知识的系统穿越,正式成为一名充满自信的 Python 程序员!

© 2026 Python 官方教程