跳转到主要内容

用于重新排列Python代码块中导入语句的工具。

项目描述

一个用于在Python代码块中重新排列导入语句的工具。

该项目位于github

它也位于pypi: * http://pypi.python.org/pypi/nouvelordre/

入门

常见用法

‘reorder’ 是一个可执行脚本

$ nouvelordre.py --infile mymodule.py --outfile rewritten.py

相当于

$ nouvelordre.py < mymodule.py > rewritten.py

您可能想要重新编写目录中的所有文件,例如 ‘/home/toto/project’

$ for file in $(find '/home/toto/project') ; do reorder -i $file -o $file ; done
$ <run your test suite!>
$ git diff

当然,如果您运行上述命令,您正在使用版本控制,因此您可以在遇到问题时检查diff并撤销修改

安装

目前安装程序不是很好,但应该可以工作。

从源代码安装

$ python setup.py install

从互联网(Pypi - http://pypi.python.org

$ pip install nouvelordre

作为一个旁注,我建议在 virtualenv 中安装 - 这意味着在上述安装之前运行以下命令,因此不会污染您的系统

$ virtualenv nouvelordre
$ cd nouvelordre
$ source ./bin/activate

选项

选项

--infile INFILE, -i INFILE            a Python source file, defaults to standard input
--outfile OUTFILE, -o OUTFILE         output, defaults to standard output
--dump, -d                            in case of failure, keep processing data in files
--version, -v                         prints version and exits

功能

  • 通过任何内容(例如,白色线条)分隔的块被认为是单独的。

  • 块内的语句重新排序

  • 一个语句中的导入重新排序。例如

    import sys, os

    变为

    import os
    import sys

    或者

    from module import b, a as f, c

    变为

    from module import a as f, b, c
  • 尽量避免损坏您宝贵的Python工作(见下文,灾难预防)

限制

  • 此脚本将仅处理第一层语句(即,不缩进的语句)。

  • 此脚本将不会处理同一块中同一模块的多个“导入模块”。

  • 有些文件不能通过ast.parse()编译(需要帮助)。

依赖项

必需

  • 至少Python 2.6(用于ast)

  • Python 2.7或python-argparse

退出代码

  • 如果一切顺利,则为0。

  • 如果出现NotImplementedError(同一行上的导入与另一条指令,由分号分隔),则为129。

  • 如果ast.parse无法编译文件,则为130。

灾难预防

此软件并不完美,可能会杀死您的金毛犬或毁掉您的文凭,但我已经尽力确保这种情况永远不会发生。

‘reorder’执行2次遍历。遍历1在原始输入上执行;遍历2在遍历1的结果上执行。如果两次遍历中的任何一次发生错误,则程序退出并保持文件不变。如果遍历1和2的结果不同,则程序退出并保持文件不变。这不能保证100%,但它确保文件可编译,并且已执行所有优化。

我只是因为我更喜欢我的程序承认它失败了,而不是切碎您美丽的Python源代码。

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分发

nouvelordre-0.1.tar.gz (18.2 kB 查看散列)

上传时间

由以下机构支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面