python项目2to3方案预研

news/2024/4/29 8:32:38/文章来源:https://blog.csdn.net/General_zy/article/details/133049220

目录

  • 官方工具2to3
    • 工具安装
    • 参数解释
    • 基本使用
    • 工具缺陷
  • future
    • 工具安装
    • 参数解释
    • 基本使用
    • 工具缺陷
  • python-modernize
    • 工具安装
    • 参数解释
    • 基本使用
    • 工具缺陷
  • pyupgrade
    • 工具安装
    • 参数解释
    • 基本使用
    • 工具缺陷
  • 对比

官方工具2to3

2to3 是Python官方提供的用于将Python 2代码转换为Python 3代码的工具。它能够自动检测Python 2代码中的语法和库差异,并尝试进行相应的转换。

工具安装

2to3 是Python的一部分,因此在安装Python时它会自动安装,如果一些版本的python没有自带2to3工具,可以使用pip命令安装:

pip install 2to3

要运行 2to3,你可以在命令行中输入:

2to3.exe --help

在这里插入图片描述

$ 2to3.exe --help
用法:2to3 [选项] 文件|目录...选项:-h, --help            显示此帮助信息并退出-d, --doctests_only   仅修复文档测试-f FIX, --fix=FIX     每个 FIX 指定一个转换;默认:全部-j PROCESSES, --processes=PROCESSES并行运行 2to3-x NOFIX, --nofix=NOFIX阻止运行某个转换-l, --list-fixes      列出可用的转换-p, --print-function  修改语法以使 print() 成为一个函数-e, --exec-function   修改语法以使 exec() 成为一个函数-v, --verbose         更详细的日志记录--no-diffs            不显示重构的差异-w, --write           写回修改后的文件-n, --nobackups       不为修改后的文件写备份-o OUTPUT_DIR, --output-dir=OUTPUT_DIR将输出文件放在此目录中,而不是覆盖输入文件。需要 -n。-W, --write-unchanged-files即使没有必要进行更改,也写入文件(与 --output-dir 一起使用很有用);隐含 -w。--add-suffix=ADD_SUFFIX在所有输出文件名后附加此字符串。如果非空,需要 -n。 例如:--add-suffix='3' 将生成

参数解释

  1. -h, --help

    • 作用:显示帮助信息,列出2to3工具的选项和用法说明。
    • 示例:2to3 --help
  2. -d, --doctests_only

    • 作用:仅修复文档测试。这个选项用于只对文档中的测试代码进行转换。
    • 示例:2to3 -d your_code.py
  3. -f FIX, --fix=FIX

    • 作用:指定转换规则。可以通过这个选项来选择要应用的特定转换规则。默认情况下是应用所有的规则。
    • 示例:2to3 -f all your_code.py
  4. -j PROCESSES, --processes=PROCESSES

    • 作用:并行运行2to3。可以指定要同时运行的进程数量,以加快转换的速度。
    • 示例:2to3 -j 4 your_code.py
  5. -x NOFIX, --nofix=NOFIX

    • 作用:阻止运行某个转换。可以使用这个选项来阻止特定的转换规则被应用。
    • 示例:2to3 -x range your_code.py
  6. -l, --list-fixes

    • 作用:列出可用的转换规则。这个选项会显示出所有可用的转换规则的列表。
    • 示例:2to3 -l
  7. -p, --print-function

    • 作用:修改语法以使 print() 成为一个函数。在Python 3中,print 语句被替换为了 print() 函数。
    • 示例:2to3 -p your_code.py
  8. -e, --exec-function

    • 作用:修改语法以使 exec() 成为一个函数。在Python 3中,exec 语句被替换为了 exec() 函数。
    • 示例:2to3 -e your_code.py
  9. -v, --verbose

    • 作用:产生更详细的日志记录。会输出更多关于转换过程的详细信息。
    • 示例:2to3 -v your_code.py
  10. --no-diffs

    • 作用:不显示重构的差异。在转换过程中,不会显示每个文件的改动差异。
    • 示例:2to3 --no-diffs your_code.py
  11. -w, --write

    • 作用:写回修改后的文件。会直接在原文件上进行修改,覆盖原来的Python 2代码。
    • 示例:2to3 -w your_code.py
  12. -n, --nobackups

    • 作用:不为修改后的文件写备份。在进行转换时,不会为原文件创建备份。
    • 示例:2to3 -n your_code.py
  13. -o OUTPUT_DIR, --output-dir=OUTPUT_DIR

    • 作用:将输出文件放在指定目录中,而不是覆盖输入文件。需要搭配 -n 选项一起使用。
    • 示例:2to3 -o converted_code -n your_code.py
  14. -W, --write-unchanged-files

    • 作用:即使没有必要进行更改,也写入文件。这在使用 --output-dir 选项时非常有用,会确保所有文件都被写入。
    • 示例:2to3 -W -o converted_code -n your_code.py
  15. --add-suffix=ADD_SUFFIX

    • 作用:在所有输出文件名后附加指定字符串。如果指定了非空的后缀,需要搭配 -n 选项一起使用。
    • 示例:2to3 --add-suffix='.bak' -n your_code.py

基本使用

  1. 只提示,不修改原脚本:

    $ 2to3.exe -j 4 .
    RefactoringTool: Skipping optional fixer: buffer
    RefactoringTool: Skipping optional fixer: idioms
    RefactoringTool: Skipping optional fixer: set_literal
    RefactoringTool: Skipping optional fixer: ws_comma
    --- .\main.py   (original)
    +++ .\main.py   (refactored)
    @@ -1 +1 @@
    -print "This is ingress of the project"
    +print("This is ingress of the project")
    --- .\apps\urls.py      (original)
    +++ .\apps\urls.py      (refactored)
    @@ -1 +1 @@
    -print "this is the url file"
    +print("this is the url file")
    RefactoringTool: No files need to be modified.
    
  2. 直接修改原脚本,同时会对原脚本做备份 -w:

    $ 2to3.exe -w .
    RefactoringTool: Skipping optional fixer: buffer
    RefactoringTool: Skipping optional fixer: idioms
    RefactoringTool: Skipping optional fixer: set_literal
    RefactoringTool: Skipping optional fixer: ws_comma
    RefactoringTool: Refactored .\main.py
    RefactoringTool: Refactored .\apps\urls.py
    RefactoringTool: Files that were modified:
    RefactoringTool: .\main.py
    RefactoringTool: .\apps\urls.py
    --- .\main.py   (original)
    +++ .\main.py   (refactored)
    @@ -1 +1 @@
    -print "This is ingress of the project"
    +print("This is ingress of the project")
    --- .\apps\urls.py      (original)
    +++ .\apps\urls.py      (refactored)
    @@ -1 +1 @@
    -print "this is the url file"
    +print("this is the url file")
    

一般情况下,对于大项目应该并发的去转换,并且应用所有过滤规则,然后将原文件备份以供参考:

2to3.exe -j 4 -f all -w .

在这里插入图片描述

工具缺陷

2to3 工具是一个非常有用的工具,但也有一些缺陷和注意事项:

  1. 不能处理所有情况

    • 2to3 虽然可以处理许多常见的转换,但它并不能解决所有的情况。特别是对于一些复杂的代码结构或者使用了一些特殊库的情况,可能需要手动进行调整。
  2. 可能会引入错误

    • 由于自动转换过程可能涉及到复杂的代码结构和逻辑,有时候可能会出现转换后引入的错误或者逻辑不符合预期。
  3. 需要人工审查

    • 无论何时使用自动转换工具,都建议在转换后对代码进行人工审查以确保其正确性。
  4. 不一定能保留所有的原始注释和格式

    • 在转换过程中,原始的注释和代码格式可能会发生变化,特别是对于一些复杂的代码结构。需要在转换后进行检查和调整。
  5. 对第三方库的支持有限

    • 2to3 主要针对标准库进行转换,对于一些第三方库可能支持不完善或者需要额外的配置。
  6. 可能会产生大量的转换结果

    • 在对大型代码库进行转换时,可能会产生大量的转换结果,需要耗费一定的时间和精力进行检查和调整。
  7. 可能会导致性能下降

    • 一些复杂的转换可能会导致转换后的代码性能下降,需要进行优化。
  8. 不适用于所有项目

    • 对于一些旧的、特殊的项目,可能并不适合直接使用2to3工具进行转换,可能需要考虑其他迁移策略。

总的来说,2to3是一个很有用的工具,可以帮助自动化大部分的Python 2到Python 3的迁移工作,但需要谨慎使用,同时在转换后进行仔细的代码审查以确保正确性。在处理复杂或特殊情况时,可能需要结合手动调整和其他工具来完成迁移工作。

future

工具安装

future 是一个用于帮助在 Python 2 代码中使用 Python 3 的特性的库。它提供了一组可以让 Python 2 代码更容易向 Python 3 迁移的工具。

可以使用pip命令安装该工具:

pip install future

以下是 future 库的一些主要特点和功能:

  1. 兼容性

    • future 库可以让你在 Python 2 中使用一些 Python 3 的特性,从而逐步实现向 Python 3 的平滑过渡。
  2. 提供兼容模块

    • future 提供了一系列的模块,例如 __future__builtins 等,可以让你在 Python 2 中使用 Python 3 的一些内置函数、语法等。
  3. 简化代码

    • 通过使用 future 提供的模块,你可以更容易地编写符合 Python 3 标准的代码,而不必担心在 Python 2 中的兼容性问题。
  4. 提供一些辅助函数和工具

    • future 还提供了一些辅助函数,用于处理一些常见的迁移问题,例如处理文本编码等。
  5. 支持通过命令行工具进行代码转换

    • futurizefuture 库提供的一个命令行工具,可以帮助你批量地将 Python 2 代码转换为兼容 Python 3 的代码。

    • 例如,可以通过以下命令将一个目录下的 Python 2 代码转换为 Python 3:

      futurize -f all your_code.py
      
  6. 提供配置选项

    • 你可以通过配置文件或命令行选项来定制转换过程,例如选择要应用的 fixers 或指定转换后的输出目录。

总的来说,future 是一个非常实用的库,可以帮助你在 Python 2 中逐步采用 Python 3 的特性,从而为将来迁移到 Python 3 打下基础。但需要注意,虽然它可以简化许多工作,但并不是所有的代码都可以通过 future 完全自动转换,可能还需要手动进行一些调整。

参数解释

$ futurize --help
Usage: futurize [options] file|dir ...Options:-h, --help            show this help message and exit-V, --version         Report the version number of futurize-a, --all-imports     Add all __future__ and future imports to each module-1, --stage1          Modernize Python 2 code only; no compatibility withPython 3 (or dependency on ``future``)-2, --stage2          Take modernized (stage1) code and add a dependency on``future`` to provide Py3 compatibility.-0, --both-stages     Apply both stages 1 and 2-u, --unicode-literalsAdd ``from __future__ import unicode_literals`` toimplicitly convert all unadorned string literals ''into unicode strings-f FIX, --fix=FIX     Each FIX specifies a transformation; default: all.Either use '-f division -f metaclass' etc. or use thefully-qualified module name: '-flib2to3.fixes.fix_types -flibfuturize.fixes.fix_unicode_keep_u'-j PROCESSES, --processes=PROCESSESRun 2to3 concurrently-x NOFIX, --nofix=NOFIXPrevent a fixer from being run.-l, --list-fixes      List available transformations-p, --print-function  Modify the grammar so that print() is a function-v, --verbose         More verbose logging--no-diffs            Don't show diffs of the refactoring-w, --write           Write back modified files-n, --nobackups       Don't write backups for modified files.-o OUTPUT_DIR, --output-dir=OUTPUT_DIRPut output files in this directory instead ofoverwriting the input files.  Requires -n. For Python>= 2.7 only.-W, --write-unchanged-filesAlso write files even if no changes were required(useful with --output-dir); implies -w.--add-suffix=ADD_SUFFIXAppend this string to all output filenames. Requires-n if non-empty. For Python >= 2.7 only.ex: --add-suffix='3' will generate .py3 files.

汉化:

$ futurize --help
用法: futurize [选项] 文件|目录 ...选项:-h, --help            显示此帮助信息并退出-V, --version         报告 futurize 的版本号-a, --all-imports     向每个模块添加所有的 __future__ 和 future 导入-1, --stage1          仅现代化 Python 2 代码;不与 Python 3 兼容(或依赖于“future”)-2, --stage2          获取现代化(stage1)代码并添加对“future”的依赖以提供 Py3 兼容性。-0, --both-stages     应用阶段1和阶段2-u, --unicode-literals添加“from __future__ import unicode_literals”以隐式将所有未装饰的字符串文字 '' 转换为 Unicode 字符串-f FIX, --fix=FIX     每个 FIX 指定一个转换;默认:全部。要么使用 '-f division -f metaclass' 等,或者使用完全限定的模块名:'-flib2to3.fixes.fix_types -flibfuturize.fixes.fix_unicode_keep_u'-j PROCESSES, --processes=PROCESSES并行运行 2to3-x NOFIX, --nofix=NOFIX阻止运行某个转换。-l, --list-fixes      列出可用的转换-p, --print-function  修改语法以使 print() 成为一个函数-v, --verbose         更详细的日志记录--no-diffs            不显示重构的差异-w, --write           写回修改后的文件-n, --nobackups       不为修改后的文件写备份。-o OUTPUT_DIR, --output-dir=OUTPUT_DIR将输出文件放在此目录中,而不是覆盖输入文件。需要 -n。仅适用于 Python >= 2.7。-W, --write-unchanged-files即使没有必要进行更改,也写入文件(与 --output-dir 一起使用很有用);隐含 -w。--add-suffix=ADD_SUFFIX在所有输出文件名后附加此字符串。如果非空,需要 -n。仅适用于 Python >= 2.7。例如:--add-suffix='3' 将生成 .py3 文件。

基本使用

futurize的代码转换方法有第1阶段和第2阶段。

stage1:

  1. 在不影响Python2系统环境的范围内执行代码转换。因此,stage1中转换后的代码可能无法在Python3环境中工作。 stage1的目的是在与Python2兼容的范围内执行代码转换,这是完全更改Python3系列代码的第一步。通过将stage1夹在中间,可以降低一次转换代码的风险。

  2. 在stage1中,使用__future__模块,以便甚至可以在2系列环境中实现Python 3系列中与2系列不兼容的功能。不要添加将来的模块。

stage2:

  1. 在stage2中,为Python3系列完全重写了代码。

基本使用:

  1. 预览stage1中更改的部分(不写入)。

    $ futurize.exe --stage1 .
    RefactoringTool: Skipping optional fixer: idioms
    RefactoringTool: Skipping optional fixer: ws_comma
    RefactoringTool: Refactored .\main.py
    RefactoringTool: Refactored .\apps\urls.py
    RefactoringTool: Files that need to be modified:
    RefactoringTool: .\main.py
    RefactoringTool: .\apps\urls.py
    --- .\main.py   (original)
    +++ .\main.py   (refactored)
    @@ -1 +1,2 @@
    -print "This is ingress of the project"
    +from __future__ import print_function
    +print("This is ingress of the project")
    --- .\apps\urls.py      (original)
    +++ .\apps\urls.py      (refactored)
    @@ -1 +1,2 @@
    -print "this is the url file"
    +from __future__ import print_function
    +print("this is the url file")
    
  2. 重写代码,并生成备份文件

    futurize.exe -0  -w  -f all .
    

    在这里插入图片描述

工具缺陷

  1. 提供了兼容python2和python3的中间文件,但似乎无法直接转换到python3.
  2. 主要提供了对标准库的支持。

python-modernize

工具安装

python-modernize 是一个用于将 Python 2 代码现代化以兼容 Python 3 的工具。它提供了一组自动化工具,可以帮助将 Python 2 代码转换成符合 Python 3 标准的形式。

可以使用pip命令安装:

pip install modernize

以下是 python-modernize 的一些主要特点和功能:

  1. 自动转换

    • python-modernize 提供了一系列的 fixers(转换器),可以自动将 Python 2 代码转换为兼容 Python 3 的形式。
  2. 向后兼容

    • 转换后的代码可以在 Python 2 和 Python 3 上运行,从而保持向后兼容性。
  3. 提供多个 fixers

    • python-modernize 包含许多 fixers,可以用于解决各种不同的转换问题,例如将 print 语句转换为 print() 函数、将除法行为从整数转换为浮点数等。
  4. 支持多个转换阶段

    • 你可以选择性地运行不同阶段的转换,从而灵活地控制代码转换的深度。
  5. 提供详细的帮助文档

    • python-modernize 提供了丰富的文档,可以帮助你了解如何正确地使用工具。
  6. 支持通过命令行工具进行代码转换

    • 你可以使用命令行工具来批量转换 Python 2 代码为兼容 Python 3 的形式。

    • 例如,可以通过以下命令将一个目录下的 Python 2 代码转换为 Python 3:

      modernize -f future your_code.py
      
  7. 可定制性

    • 你可以根据自己的需求选择性地应用 fixers,也可以配置工具的行为。
  8. 提供备份功能

    • python-modernize 可以为转换后的代码创建备份,以便在需要时进行恢复。

参数解释

$ modernize.exe --help
Python           _              __ __  ___  __| |___ _ _ _ _ (_)______| '  \/ _ \/ _` / -_) '_| ' \| |_ / -_)|_|_|_\___/\__,_\___|_| |_||_|_/__\___| 0.8.0Usage: modernize [options] file|dir ...Options:--version             show program's version number and exit-h, --help            show this help message and exit-v, --verbose         Show more verbose logging.--no-diffs            Don't show diffs of the refactoring.-l, --list-fixes      List standard transformations.-d, --doctests_only   Fix up doctests only.-f FIX, --fix=FIX     Each FIX specifies a transformation; '-f default'includes default fixers.--fixers-here         Add current working directory to python path (sofixers can be found)-j PROCESSES, --processes=PROCESSESRun fissix concurrently.-x NOFIX, --nofix=NOFIXPrevent a fixer from being run.-p, --print-function  Modify the grammar so that print() is a function.-w, --write           Write back modified files.-n, --nobackups       Don't write backups for modified files.--six-unicode         Wrap unicode literals in six.u().--future-unicode      Use 'from __future__ import unicode_literals'(onlyuseful for Python 2.6+).--no-six              Exclude fixes that depend on the six package.--enforce             Returns non-zero exit code if any fixers had to beapplied.  Useful for enforcing Python 3 compatibility.

汉化:

$ modernize.exe --help
Python           _              __ __  ___  __| |___ _ _ _ _ (_)______| '  \/ _ \/ _` / -_) '_| ' \| |_ / -_)|_|_|_\___/\__,_\___|_| |_||_|_/__\___| 0.8.0用法: modernize [选项] 文件|目录 ...选项:--version             显示程序版本号并退出-h, --help            显示此帮助信息并退出-v, --verbose         显示更详细的日志记录。--no-diffs            不显示重构的差异。-l, --list-fixes      列出标准的转换。-d, --doctests_only   仅修复文档测试。-f FIX, --fix=FIX     每个 FIX 指定一个转换;'-f default' 包括默认的转换器。--fixers-here         将当前工作目录添加到 Python 路径中(以便找到转换器)。-j PROCESSES, --processes=PROCESSES并行运行 fissix。-x NOFIX, --nofix=NOFIX阻止运行某个转换。-p, --print-function  修改语法以使 print() 成为一个函数。-w, --write           写回修改后的文件。-n, --nobackups       不为修改后的文件写备份。--six-unicode         将 Unicode 文字字面值包装在 six.u() 中。--future-unicode      使用 'from __future__ import unicode_literals'(仅适用于 Python 2.6+)。--no-six              排除依赖于 six 包的转换。--enforce             如果需要应用任何转换,则返回非零退出代码。用于强制执行 Python 3 兼容性。

基本使用

当你使用 modernize.exe 工具时,你可以按照以下示例来执行相应的转换操作。

  1. 显示版本号
modernize.exe --version
  1. 显示帮助信息
modernize.exe --help
  1. 列出可用的转换规则
modernize.exe -l
  1. 仅修复文档测试
modernize.exe -d your_code.py
  1. 应用所有默认的转换规则
modernize.exe -f default your_code.py
  1. 并行运行转换(例如,使用4个进程同时转换):
modernize.exe -j 4 your_code.py
  1. 阻止某个转换规则的运行(例如,阻止运行 division 转换):
modernize.exe -x division your_code.py
  1. 修改语法以使 print() 成为一个函数
modernize.exe -p your_code.py
  1. 写回修改后的文件
modernize.exe -w your_code.py
  1. 不为修改后的文件写备份
modernize.exe -n your_code.py
  1. 将Unicode文字字面值包装在 six.u()
modernize.exe --six-unicode your_code.py
  1. 使用 from __future__ import unicode_literals(仅适用于 Python 2.6+)
modernize.exe --future-unicode your_code.py
  1. 排除依赖于 six 包的转换
modernize.exe --no-six your_code.py
  1. 如果需要应用任何转换,则返回非零退出代码
modernize.exe --enforce your_code.py

工具缺陷

pyupgrade

A tool (and pre-commit hook) to automatically upgrade syntax for newer versions of the language.

工具安装

pip install pyupgrade

参数解释

$ pyupgrade.exe --help
usage: pyupgrade [-h] [--exit-zero-even-if-changed] [--keep-percent-format][--keep-mock] [--keep-runtime-typing] [--py3-plus][--py36-plus] [--py37-plus] [--py38-plus] [--py39-plus][--py310-plus] [--py311-plus][filenames ...]positional arguments:filenamesoptions:-h, --help            show this help message and exit--exit-zero-even-if-changed--keep-percent-format--keep-mock--keep-runtime-typing--py3-plus, --py3-only--py36-plus--py37-plus--py38-plus--py39-plus--py310-plus--py311-plus

汉…化:

$ pyupgrade.exe --help
用法: pyupgrade [-h] [--exit-zero-even-if-changed] [--keep-percent-format][--keep-mock] [--keep-runtime-typing] [--py3-plus][--py36-plus] [--py37-plus] [--py38-plus] [--py39-plus][--py310-plus] [--py311-plus][文件名 ...]位置参数:文件名选项:-h, --help            显示此帮助信息并退出--exit-zero-even-if-changed--keep-percent-format--keep-mock--keep-runtime-typing--py3-plus, --py3-only--py36-plus--py37-plus--py38-plus--py39-plus--py310-plus--py311-plus

基本使用

  1. 转换单个文件

    使用以下命令可以将单个 Python 文件转换为 Python 3 兼容形式:

    pyupgrade your_code.py
    

    这会将 your_code.py 中的 Python 2 代码转换为 Python 3 兼容的形式。

  2. 转换整个目录

    如果你想批量转换一个目录下的所有 Python 文件,可以使用类似以下的命令:

    pyupgrade your_directory/
    

    这将会逐个转换目录中的所有 Python 文件。

  3. 保留百分号格式化字符串

    如果你想保留百分号格式化字符串(如 %s)而不转换为 f-strings,可以使用 --keep-percent-format 选项:

    pyupgrade --keep-percent-format your_code.py
    
  4. 保留 mock 模块

    如果你使用了 mock 模块,可以使用 --keep-mock 选项来保留该模块:

    pyupgrade --keep-mock your_code.py
    
  5. 保留运行时类型提示

    如果你想保留运行时类型提示(如 # type: ignore),可以使用 --keep-runtime-typing 选项:

    pyupgrade --keep-runtime-typing your_code.py
    
  6. 仅转换到 Python 3

    默认情况下,pyupgrade 将代码转换为适用于所有 Python 3 版本的形式。如果你想只将代码转换为 Python 3,可以使用 --py3-only 选项:

    pyupgrade --py3-only your_code.py
    
  7. 只转换到特定 Python 3 版本

    你可以使用相应的选项(如 --py36-plus--py37-plus 等)来将代码转换为特定版本的 Python 3 兼容形式。

    例如,要将代码转换为 Python 3.6 兼容形式,可以使用:

    pyupgrade --py36-plus your_code.py
    

    同样的方式适用于其他版本,如 Python 3.7、Python 3.8 等。

  8. 设置退出代码

    默认情况下,如果发生了转换,pyupgrade 将返回非零退出代码。你可以使用 --exit-zero-even-if-changed 选项来始终返回零退出代码。

    pyupgrade --exit-zero-even-if-changed your_code.py
    

将python2转为python3.11:

print "This is ingress of the project"class C(Base):def f(self):super(C, self).f()import functools@functools.lru_cache()
def expensive():pass

执行pyupgrade --py3-plus .\main.py

令我疑惑的是,并没有任何事情发生!!

工具缺陷

  1. 文档稀缺;
  2. 似乎不会执行;

对比

选择哪个工具来进行从 Python 2 到 Python 3 的迁移取决于你的项目特定需求以及你个人的偏好。以下是一些常用的迁移工具的特点和适用场景:

  1. 2to3

    • 官方工具:2to3 是 Python 官方提供的迁移工具,专门设计用于将 Python 2 代码转换为 Python 3 兼容的形式。
    • 自动化程度高:2to3 可以自动识别和转换许多常见的 Python 2 到 Python 3 的语法和库的使用差异。
    • 广泛使用:由于是官方工具,2to3 在许多项目中得到了广泛的应用。
  2. futurize

    • 向前兼容性:futurize 旨在提供向后兼容性,使得代码可以同时在 Python 2 和 Python 3 中运行。
    • 两阶段转换:可以选择将代码先转换成 Python 2/3 兼容形式(阶段 1),然后再添加 future 依赖以实现完全的 Python 3 兼容(阶段 2)。
    • 灵活性:可以根据需要选择不同的转换规则。
  3. modernize

    • 专注于 Python 2 到 Python 3:modernize 专注于将 Python 2 代码转换为 Python 3 兼容形式。
    • 通过 2to3 进行转换:实际上,modernize 是基于 2to3 构建的,但提供了一些额外的功能和选项。
  4. pyupgrade

    • 简单易用:pyupgrade 是一个简单、快速的工具,用于将 Python 2 代码转换为 Python 3 兼容的形式。
    • 自动化程度较高:pyupgrade 试图通过自动化转换来尽可能减少需要手动检查的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_173565.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决qml编译时出现错误ninja: build stopped: subcommand failed.

qml编译时出现错误ninja: build stopped: subcommand failed. 如下图: 解决这个编译错误其实很简单,我把Window写错了,写成了window, 如果有类似的报错,可以检查一下qml代码是否有问题。当然在Qt Creator里也没有错误提示&#x…

Canal实现Mysql数据同步至Redis、Elasticsearch

文章目录 1.Canal简介1.1 MySQL主备复制原理1.2 canal工作原理 2.开启MySQL Binlog3.安装Canal3.1 下载Canal3.2 修改配置文件3.3 启动和关闭 4.SpringCloud集成Canal4.1 Canal数据结构![在这里插入图片描述](https://img-blog.csdnimg.cn/c64b40c2231a4ea39a95aac81d771bd1.pn…

重装系统(配置环境)

这里写目录标题 0.重装系统1.python1.1 anaconda1.2 pycharm1.3 深度学习环境配置 2.java2.1.安装JDK2.2.配置JDK环境变量2.3IDEA2.4 Maven 3.大数据3.1 虚拟机3.2 Hadoop平台3.3 存储3.4 采集3.5 计算3.6 查询3.7 可视化 0.重装系统 // An highlighted block var foo bar;1.…

【性能优化下】组织结构同步优化二,全量同步/增量同步,断点续传实现方式

看到这一篇文章的 xdm ,应该对组织结构同步有一些想法了吧,如果没有,可以看前面两篇文章,可以通过如下地址查看一下: 【性能优化上】第三方组织结构同步优化一,你 get 到了吗? 坑爹&#xff0c…

UE5读取json文件

一、下载插件 在工程中启用 二、定义读取外部json文件的函数,参考我之前的文章 ue5读取外部文件_艺菲的博客-CSDN博客 三、读取文件并解析为json对象 这里Load Text就是自己定义的函数,ResourceBundle为一个字符串常量,通常是读取的文件夹…

数据预处理方式合集

删除空行 #del all None value data_all.dropna(axis1, howall, inplaceTrue) 删除空列 #del all None value data_all.dropna(axis0, howall, inplaceTrue) 缺失值处理 观测缺失值 观测数据缺失值有一个比较好用的工具包——missingno,直接传入DataFrame&…

【Html】用CSS定义咖啡 - 咖啡配料展示

显示效果 代码 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>CodePen - For The Love Of Coffee</title><link rel"stylesheet" href"./style.css">&l…

Jenkins结合Gitlab,实现镜像构建及推送

docker-compose jenkins的docker-compose目录为为/home/jenkins&#xff0c;这个后面写脚本的时候需要对应上 version: 3 services:docker_jenkins:restart: alwaysimage: jenkins/jenkins:ltscontainer_name: docker_jenkinsprivileged: true ports:- 8080:8080- 50000:5000…

MyBatis基础之执行SQL

文章目录 执行 SQL 语句1. 增删改操作insert 元素insert 过程中的主键回填delete 元素 和 update 元素 2. getMapper 方法3. 查操作select 元素select 与 聚合函数 4. 传递多个参数使用 Map 传递多参数使用 JavaBean 传递多参使用注解方式传递多参数 执行 SQL 语句 Mapper 是 …

(2) Java 8 实战第二版——补充 收集数据、并行数据处理能力与性能

第6章 用Collectors类创建和使用收集器将数据流归约为一个值汇总&#xff1a;归约的特殊情况数据分组和分区开发你的自定义收集器 对一个交易列表按货币分组&#xff0c;获得该货币的所有交易额总和&#xff08;返回一个Map<Currency, Integer>&#xff09;。将交易列表…

面向组织分析的内容

声明 本文是学习GB-T 42859-2023 航天产品质量问题三个面向分析方法实施要求. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了航天产品质量问题三个面向分析方法实施的一般要求、程序和分析内容。 本文件适用于承担航天产品研制…

性能测试 —— Tomcat监控与调优:Jconsole监控

JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具&#xff0c;JConsole使用Java虚拟机(Java VM)&#xff0c;提供在Java平台上运行的应用程序的性能和资源消耗的信息。在Java平台&#xff0c;标准版(Java SE平台)6&#xff0c;JConsole的已经更新到目前的外观…

阿里云服务器价格表,轻量和服务器最新活动价格表汇总

租用阿里云服务器怎么收费&#xff1f;阿里云服务器配置不同一年价格也不同&#xff0c;阿里云2核2G3M带宽108元一年、2核4G4M带宽297.98元12个月&#xff0c;云服务器u1公网带宽可选1M到5M&#xff0c;系统盘为ESSD云盘40GB起&#xff0c;CPU内存配置可选2核2G、2核4G、4核8G、…

抖音seo矩阵系统源码分享-技术梳理

抖音seo源码&#xff0c;抖音seo矩阵系统源码技术搭建&#xff0c;抖音seo源码技术开发思路梳理搭建 抖音账号矩阵系统部分源代码分享 if (empty($video_item)) {$this->displayJsonError(参数错误);}$curr_platform json_decode($video_item[dv_platform], 1);$curr_plat…

牛客网Verilog刷题 | 快速入门-基础语法

1、VL1 四选一多路器 描述 制作一个四选一的多路选择器&#xff0c;要求输出定义上为线网类型 状态转换&#xff1a; d0 11 d1 10 d2 01 d3 00 信号示意图&#xff1a; 输入描述&#xff1a; 输入信号 d1,d2,d3,d4 sel 类型 wire 输出描述&#xff1a; 输出信号 mux_ou…

vim缓存-交换文件

Catf1agCTF靶场 web swp 题目链接&#xff1a;http://catf1ag.cn/ 个人博客&#xff1a;https://sword-blogs.com/ 题目考点&#xff1a; vim在编辑文档的过程中如果异常退出&#xff0c;会产生缓存文件 vim 交换文件名 参考文章&#xff1a;vim手册 https://yianwillis.…

ROS2 的行为树 — 第 1 部分:解锁高级机器人决策和控制

一、说明 在复杂而迷人的机器人世界中&#xff0c;行为树&#xff08;BT&#xff09;已成为决策过程中不可或缺的一部分。它们提供了一种结构化、模块化和高效的方法来对机器人的行为进行编程。BT起源于视频游戏行业&#xff0c;用于控制非玩家角色&#xff0c;他们在机器人领域…

云原生的简单理解

一、何谓云原生&#xff1f; 一种构建和运行应用软件的方法 应用程序从设计之初即考虑到云的环境&#xff0c;原生为云而设计&#xff0c;在云上以最佳姿势运行&#xff0c;充分利用和发挥云平台的弹性分布式优势。 二、包括以下四个要素 采用容器化部署&#xff1a;实现云平…

机器学习(17)---支持向量机(SVM)

支持向量机 一、概述1.1 介绍1.2 工作原理1.3 三层理解 二、sklearn.svm.SVC2.1 查看数据集2.2 contour函数2.3 画决策边界&#xff1a;制作网格2.4 建模画图 三、非线性情况推广3.1 查看数据集3.2 线性画图3.3 为非线性数据增加维度并绘制3D图像 四、核函数 一、概述 1.1 介绍…

hadoop测试环境sqoop使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Sqoop看这篇文章就够了_must contain $conditions in where clause._SoWhat1412的博客-CSDN博客 大数据环境 C:\Windows\System32\drivers\etc 修改ip和hostname的对应关系 1…