将python-project从speed1.x升级到speed2.0

paddle1to2的Python项目详细描述


将python模型从padle-1.x升级到speed-2。在

Build StatusCoverage StatusVersionLicense

注意

paddle1to2的目的是将python文件从padle-1.x逐个转换为slate-2,它不处理间接导入。e、 g

# filename "a.py"importpaddle.fluidasfluidpass# filename "b.py"fromaimport*classMyLayer(fluid.layers.Layer):pass

“b.py”中的fluid.layers.Layer不会被转换。 ,所以在运行paddle1to2之前,必须确保您已经为每个python文件直接导入所有使用过的slate模块、类、对象。

安装

padle1to2支持Linux、Mac OS、Windows(建议使用Git Bash)、,但它需要Python3.5.4或更高版本才能运行。Linux和Mac操作系统支持多进程,Windows支持单进程,这将导致性能差异。在

  1. 用pip安装
^{pr2}$

ATTENTION:如果您的设备包含多个版本的python,则可能需要运行以下命令:

python3 -m pip install -U paddle1to2
python3 -m paddle1to2 -h
python3 -m paddle1to2 --inpath /path/to/model.py
  1. 从源安装
git clone https://github.com/T8T9/paddle1to2.git
cd paddle1to2
python setup.py sdist bdist_wheel
pip install -U ./dist/paddle1to2-*.whl
paddle1to2 --help # show help
paddle1to2 --inpath /path/to/model.py # upgrade your model from paddle-1.x to paddle-2.0

开发

如果您是开发人员,并且希望快速测试代码,可以在项目目录中运行以下命令:

python -m paddle1to2 --inpath /path/to/model.py

#or 

python paddle1to2/main.py --inpath /path/to/model.py

此外,如果要运行特定的重构,可以使用以下命令:

python -m paddle1to2 --inpath /path/to/model.py --refactor <refactor_name>

使用python -m paddle1to2 -h查看所有重构的完整列表。在

如果要运行所有unittest,请使用命令:

python -m unittest discover paddle1to2/tests/
# or
python setup.py test

或使用命令:

python -m unittest paddle1to2/tests/test_refactor.py

运行特定的测试文件。在

更改规范

change_spec是在中定义的python dict规范py,它定义了重构代码的规则。在

change_spec={"path.to.old_api":{"alias":["path.to.old_api_alias1","path.to1.to2.old_api_alias2",],"update_to":"path.to.new_api","warning":"this api is deprecated.","args_list":["arg1","arg2"],"args_change":[["arg2","arg2_rename"],["arg3",""],["","new_arg","default_value"],],"args_warning":{"arg1":"warning message"},"args_transformer":"_default_transformer",},}
  • alias:主别名的别名列表path.to.old_api,所有别名都将替换为主别名。在
  • update_topath.to.old_api将被这个新api替换(如果指定的话)。在
  • warning:找到path.to.old_api时打印指定的警告消息。如果指定了update_to,则将忽略此字段。在
  • args_list:是{}的参数列表。在
  • args_change:列表列表。它包含以下格式:
    • ["arg", "new_arg"]:重命名参数,例如func(arg=value)->;func(new_arg=value)
    • ["arg", ""]:删除参数,例如func(arg=value)->;func()
    • ["", "new_arg", "default_value"]:添加一个新参数,例如func(arg=value)->;func(arg=value, new_arg=default_value)
  • args_warning:在applyargs_change之后打印指定参数的指定警告消息。在
  • args_transformer:在AST node上执行自定义的转换器,在应用args_change之后将调用它来进行进一步的重构。在

其他工具

  1. 查找特定代码段的模式,用法:
find_pattern 'import paddle'

find_pattern命令将遍历AST中的所有节点,如果您看到所需的代码片段,请键入“y”以获取模式。在

  1. 在特定代码中查找特定模式的匹配节点,用法:
find_match_node -ss 'import paddle' -ps 'any'

您还可以指定“--print results”选项来获取匹配节点的表示形式,指定“--print lineno”以获取匹配代码的行号。在

致谢

  • Bowler:现代Python项目的安全代码重构。在
  • lib2to3:用于重构python代码的内置python库。在
  • fissix:最新lib2to3的后端端口,有增强功能。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
未检测到“空格”的java ASCII码   音频如何在Java中设置SourceDataLine的音量   java MyBatissSpringBoot无法使用作为bean注入的数据源   Java字谜递归列表<List<String>>仅存储空列表<Strings>   java显示30px高的JPanel,然后用minecraft填充剩余空间   java JOGL平滑度   Java:按完整与否对1d对象数组进行排序   arraylist仅当java结构不存在时才将对象添加到java结构中   无法初始化java渲染库在安卓 studio 4.1.1上出现错误   java SpringBoot ClassCastException   java解析文本文件,基于字数   java=运算符引发异常   java使点可拖动并存储新坐标JavaFx   JavaWebSphereApplicationServer:EJB模块和JMS路由器