杰瑞科技汇

Python 2升级到Python 3要注意哪些问题?

  1. 升级现有 Python 2 代码库:将旧项目的代码修改,使其能在 Python 3 上运行。
  2. 在开发环境中安装和使用 Python 3:在你的电脑上安装 Python 3,并配置好开发环境,开始编写或运行 Python 3 代码。

下面我将详细讲解这两个场景。

Python 2升级到Python 3要注意哪些问题?-图1
(图片来源网络,侵删)

升级现有 Python 2 代码库

这是最复杂、最核心的一步,Python 2 和 Python 3 之间存在一些不兼容的语法变更,直接运行 Python 2 代码几乎一定会报错。

核心工具:2to3

Python 官方提供了一个名为 2to3 的脚本,它可以自动将大部分 Python 2 代码转换为 Python 3 代码。

使用步骤:

  1. 安装 lib2to3: 在 Python 2 的环境中,lib2to3 通常是标准库的一部分,无需单独安装。

    Python 2升级到Python 3要注意哪些问题?-图2
    (图片来源网络,侵删)
  2. 运行 2to3: 假设你的项目代码在 /path/to/your/project 目录下,打开终端,运行以下命令:

    # -w 参数会直接修改源文件,而不是生成新文件,请先备份你的代码!
    # -n 参数可以生成新文件而不修改原文件,适合第一次尝试。
    # --add-suffix 指定转换后文件的后缀,.py3
    2to3 -w /path/to/your/project
  3. 2to3 能做什么,不能做什么?

    • 能做的(自动修复)

      • print 语句:print "hello" -> print("hello")
      • 整数除法:3 / 2 -> 3 / 2 (结果是 1.5,不再是 1)
      • Unicode 字符串:"你好" (在 Python 2 中是 unicode 类型,在 Python 3 中是 str 类型)
      • xrange -> range
      • except Exception, e: -> except Exception as e:
      • raise Error, "message" -> raise Error("message")
      • 其他许多语法上的微小变化。
    • 不能做的(需要手动处理)

      Python 2升级到Python 3要注意哪些问题?-图3
      (图片来源网络,侵删)
      • 第三方库依赖:如果你的项目依赖了 Python 2 的库,2to3 无法帮你升级这些库,你需要找到它们的 Python 3 兼容版本,或者寻找替代品。
      • API 变更urlliburllib2 在 Python 3 中被重构成了 urllib.request, urllib.parse 等。2to3 可能能处理一部分,但复杂的逻辑需要你手动查阅文档并修改。
      • hasattr 的行为:在 Python 3 中,hasattr 检查的属性在获取时抛出异常,它也会抛出异常,这与 Python 2 的行为不同。
      • iternext:迭代器的实现方式有细微差别。

升级流程(推荐)

  1. 备份!备份!备份! 在进行任何修改之前,请务必完整地备份你的项目代码。

  2. 环境隔离: 强烈建议使用虚拟环境来操作,避免污染你的系统 Python。

    # 安装 virtualenv (如果还没有)
    pip install virtualenv
    # 创建一个虚拟环境
    virtualenv my_project_env -p python2  # 使用 Python 2 创建环境,以便后续对比
    source my_project_env/bin/activate   # 激活环境
  3. 安装依赖: 在虚拟环境中,安装你的项目所有依赖。

    pip install -r requirements.txt
  4. 运行测试: 确保你的 Python 2 项目在当前环境下所有测试都通过,这是你的“基准线”。

  5. 安装 Python 3: 确保你的系统上已经安装了 Python 3,如果没有,请先安装它。

  6. 创建 Python 3 虚拟环境

    deactivate  # 先退出 Python 2 环境
    virtualenv my_project_env_py3 -p python3 # 创建一个 Python 3 的环境
    source my_project_env_py3/bin/activate  # 激活
  7. 复制代码: 将你的备份代码复制到这个新的 Python 3 虚拟环境中。

  8. 运行 2to3

    # 先尝试 -n 参数,看看会生成什么变化
    2to3 -n /path/to/your/project_code_in_py3_env
    # 确认无误后,使用 -w 参数进行实际修改
    2to3 -w /path/to/your/project_code_in_py3_env
  9. 手动修复和测试

    • 运行你的测试套件,几乎肯定会失败。
    • 根据错误信息,结合 2to3 的输出,手动修复代码,这是最耗时的一步。
    • 重点关注 import 语句、print 函数的用法、字典的 .iteritems() 方法(改为 .items())等。
    • 重新安装依赖库,使用 pip install -r requirements.txt,很多库会自动安装兼容 Python 3 的版本,如果某个库没有,你需要去 PyPI 上找替代品(six, future, enum34 等)。
  10. 持续迭代: 修复、运行测试、再修复,直到所有测试通过。


在开发环境中安装和使用 Python 3

对于新项目,或者你想开始使用 Python 3,你需要在自己的电脑上配置好环境。

安装 Python 3

macOS:

  • 推荐使用 Homebrew 来安装:brew install python3
  • 系统自带的 Python 2 通常不建议动它。

Linux (Ubuntu/Debian):

  • sudo apt update
  • sudo apt install python3 python3-pip python3-venv
    • python3-venv 是创建虚拟环境的标准工具。

Windows:

  • 访问 Python 官网 下载最新的 Python 3 安装包。
  • 重要! 在安装界面,务必勾选 "Add Python to PATH" 选项,这样你就可以在命令行中直接使用 python 命令。

验证安装

打开终端 (Windows 是 CMD 或 PowerShell),输入:

# 检查版本
python --version  # 或 python3 --version
# 应该显示类似 Python 3.10.x 的版本
# 检查 pip 版本
pip --version      # 或 pip3 --version
# 应该显示 pip 对应的 Python 3 版本

使用虚拟环境(最佳实践)

为什么用虚拟环境? 它能为你每个项目创建一个隔离的 Python 环境,避免不同项目之间的库版本冲突。

如何创建和使用:

  1. 创建项目目录并进入

    mkdir my_new_project
    cd my_new_project
  2. 创建虚拟环境

    • Linux/macOS:
      python3 -m venv venv
    • Windows:
      python -m venv venv
  3. 激活虚拟环境

    • Linux/macOS:
      source venv/bin/activate
    • Windows:
      .\venv\Scripts\activate

      激活后,你的命令行提示符前面会出现 (venv),表示虚拟环境已激活。

  4. 安装库 现在在这个环境中安装的库只影响当前项目。

    # 安装一个库
    pip install requests
    # 安装特定版本
    pip install numpy==1.21.0
    # 从 requirements.txt 文件安装
    pip install -r requirements.txt
  5. 退出虚拟环境

    deactivate

总结与最佳实践

  1. 立即停止使用 Python 2:除非你有无法迁移的遗留系统,否则所有新项目都应直接使用 Python 3。
分享:
扫描分享到社交APP
上一篇
下一篇