geekdoc-python-zh/docs/pythonland/60.md

102 lines
4.2 KiB
Markdown
Raw Permalink Normal View History

2024-03-03 22:54:39 +08:00
# 如何迁移到 Python 3
> 原文:[https://python . land/migrating-from-python-2-to-3/how-to-migrate-to-python-3](https://python.land/migrating-from-python-2-to-3/how-to-migrate-to-python-3)
一旦安装了 Python 3 并开始工作,就该迁移到 Python 3 了。大多数情况下,升级代码并不难,可以遵循多种策略。
你需要做的是:
* 升级您自己的代码
* 升级到依赖项的较新版本
幸运的是,有一些工具可以帮助我们!
目录
* [2to3](#2to3 "2to3")
* [六个](#Six "Six")
* [升级您的软件包](#Upgrade_your_packages "Upgrade your packages")
* [检查最低要求的 Python 版本](#Check_for_a_minimum-required_Python_version "Check for a minimum-required Python version")
## 2to3
`2to3`是一个 Python 程序,它读取 Python 2 源代码,并应用一系列修复程序将其转换成有效的 Python 3 代码。标准库包含一组丰富的修复程序,可以处理几乎所有的代码。
Python 3 中一个显著的变化是`print`现在是一个叫做`print()`的[函数](https://python.land/introduction-to-python/functions)。例如,这段 Python 2 代码:
```py
def greet(name):
print "Hello, {0}!".format(name)
print "What's your name?"
name = raw_input()
greet(name)
```
可以通过调用以下命令进行转换:
```py
$ 2to3 greet.py
```
默认情况下,这只会将差异打印到屏幕上以供检查。如果看起来没问题,您可以使用`-w`选项来实际更改文件:
```py
$ 2to3 -w greet.py
```
原始文件被更改,旧文件将保存为 greet.py.bak。结果:
```py
def greet(name):
print("Hello, {0}!".format(name))
print("What's your name?")
name = input()
greet(name)
```
`2to3`的一些更有趣的标志是:
| 旗 | 功能 |
| --- | --- |
| -我 | 列出所有修复程序 |
| [加在以-u 结尾的法语词源的名词之后构成复数] | 排除选定的定影剂 |
| -f | 仅显式运行此修复程序 |
| -w | 更新文件而不是打印到标准输出 |
Thank you for reading my tutorials. I write these in my free time, and it requires a lot of time and effort. I use ads to keep writing these *free* articles, I hope you understand! **Support me by disabling your adblocker on my website** or, alternatively, **[buy me some coffee](https://www.buymeacoffee.com/pythonland)**. It's much appreciated and allows me to keep working on this site!
在开始转换代码之前,请继续阅读完整的 2to3 文档。
## 六个
`six`是一个 Python 2 和 3 兼容库。该项目帮助代码库同时支持 Python 2 和 3。我建议用`2to3`完全迁移到 Python 3但是如果你不能不管什么原因你至少可以让你的代码库在两个版本上都工作。
Six 提供了消除 Python 2 和 3 之间语法差异的函数。一个容易理解的例子是`six.print_()`。在 Python 3 中,打印是通过`print()`函数完成的。在 Python 2 中,`print`不需要括号。通过使用`six.print_()`,您可以用一条语句支持两种语言。
几个好听的都知道:
* 六这个名字来源于这样一个事实:二乘以三等于六。
* 对于类似的库,也可以查看`future`包。
## 升级您的软件包
您可能需要升级您所依赖的包。对于您正在使用的每个包版本,尝试找出它是否已经支持 Python 3。如果不支持就找一个支持的版本。您可能需要修改一些代码因为 API 往往会随着时间而变化。
如果你很着急,并且你的包的 API 有了很大的变化,你可以尝试找到支持 Python 3 的包的最低版本。API 在较低版本中可能没有太大的变化。使用最新版本几乎总是更好,但至少这是朝着正确方向迈出的一步!
## 检查最低要求的 Python 版本
一旦迁移到 Python 3在代码中添加 Python 版本检查。这样,您可以确保您和您的用户不会使用不兼容的版本运行您的脚本,这将导致不可理解的错误和挫折。使用这样一个简单的检查:
```py
if not sys.version_info > (2, 7):
# berate your user for running a 10 year
# python version
elif not sys.version_info >= (3, 5):
# Kindly tell your user (s)he needs to upgrade
# because you're using 3.5 features
```