makepy:免提python模块编程

makep的Python项目详细描述


    **<span style="color:red">
    This is the backport version 0.0.26 of 'makepy' for Python 2.
    Please upgrade to Python 3+ and use the current 'makepy' version 0.0.26.
    </span>**

pypi versionstagepython versionsbuild status

makepy:免提python模块编程

本项目提供:

makepy:一个简化python项目设置的命令行工具, 安装和测试。
makepy.mainlog:一个用于生成日志的模块 以及structlog设置更简单,更容易出错。
makepy.argparse:提供切入点的模块ArgumentParser 为了编写可读性更好的代码

通过pip3 install--user makepy安装

主日志模块

顾名思义,只在主模块中使用makepy.mainlog。 不要在主模块之外设置日志记录! 模块的主要功能是mainlog.设置日志

importloggingfrommakepyimportmainloglog=logging.getLogger('app')defmain(argv=None):level=logging.INFOmainlog.setup_logging(level=level,mode='json')log.info('Hello %s!','makepy',extra={'v':1})main()# {"message": "Hello makepy!", "v": 1}

当前支持的日志记录模式是jsonconsole(默认)。 使用"mode="console"或"no mode"将生成常规stdlib日志,如:

INFO:app:Hello makepy!

使用mainlog.setup_logging(level=level,use_structlog=true)设置structlog日志。 如果未安装struclog,则使用stdliblogging作为回退。 预定义的structlog设置将格式化stdlib日志,如下所示。

[info     ] info msg 1                     [stdlib]
[debug    ] debug msg 2                    [stdlib]
[error    ] error msg 3                    [stdlib]

如果在模块中使用structlog记录器,还可以获得额外的键值对。

[info     ] info msg                       [structlog] a=[1, 2, 3] v=1
[debug    ] debug msg                      [structlog] b=('a', 'b', 'c') v=2
[error    ] error msg                      [structlog] c={'x': 1} v=3

如果安装了colorama,日志将被很好地着色(structlog特性)。

argparse模块

为了编写更好的命令行应用程序,提供了一个兼容的 ArgumentParser使用4个字母的optiflag方法,替换原来的 添加参数方法。

frommakepyimportargparsedesc='My CLI Tool'p=argparse.ArgumentParser(description=desc)p.flag('--json',help='use json output format')p.flag('--dry_run',help='perform dry run')p.opti('--num','-n',help='number of iterations',metavar='N',type=int,default=1)p.opti('--file','-f',help='input file',required=True)p.opti('command',help='command to run',choices=['upper','lower'])

使用较短的名称和良好的对齐方式可以使argparse代码更具可读性。 是的,我知道,为了允许这种基于多列的编码,您需要禁用一些linter规则。 但值得一提的是,这不仅适用于argparse代码,还适用于更可读的python代码。 makepy的argumentparser还提供了一些设置其他常用模块的快捷方式 直接通过以下标志:

  • 使用"调试":添加"调试"标志
  • with_logging:解析参数后,使用makepy.mainlog自动设置日志记录
  • with_input:添加--input选项,默认为-(又名。stdin
  • 使用受保护的空格:修改argparse格式化程序,以保护定义的空白 在您的help语句中。否则argparse将删除任何换行符和重复空格, 等等,创建浓缩帮助段落。使用此选项,现在可以安全地对齐帮助文本 直接输入你的代码。请参见makep/cli.py作为示例。

下面是设置常见调试和日志记录功能的示例:

p=argparse.ArgumentParser(description=desc).with_logging(use_structlog=True).with_debug()

如果您不喜欢单行本,您也可以换行。

p=argparse.ArgumentParser(description=desc)p.with_logging(use_structlog=True)p.with_debug()p.with_input()

与_logging一起使用和可选地将与_debug一起使用可以让您快速 安装程序日志记录结构日志日志记录程序,具有可读控制台输出。 因此,使用_logging支持相同的模式使用_structlog键值参数 如上文所述,由mainlog.setup\u logging使用。

makepy命令

这个项目还提供了一个makepy命令,用于自动创建项目,增量 通过tox构建、测试并上传到pypi。

makepy cast

以下是makepy支持的一些命令:

makepy init --trg ~/workspace/newproject # setup new project/package named "newproject"
cd ~/workspace/newproject                # enter new project

makepy backport     # backport project to python2
tox -e py3          # use `tox` to install and test the package in a Python 3 environment
tox                 # install and test in all testenvs defined in `tox.ini`
makepy              # install and test in the default testenv
makepy clean        # cleanup test environments and build files

makepy dist         # build python wheel for current project
makepy dist -P 2    # build python wheel for python2
makepy dists        # build both wheels for python2 and python3
makepy version      # read version string from main __init__.py
makepy bumpversion  # increase patch level in main __init__.py
makepy install      # pip install the wheel in the system (may require sudo)
makepy dev-install  # pip install the current editable source code in the system
makepy uninstall    # uninstall current project/package from all pips

您还可以链接命令:makepy clean bumpversion dists,并且makepy将重新排序 它们和添加所有必需的依赖命令,例如makepy install-p 2是等效的 要makepy backport dist install-p 2

makepy命令依赖并可以初始化python配置文件中的值 tox.inisetup.cfg。它还可以创建一个通用的py2-py3+ 与此项目中找到的setup.py兼容。

运行makepy init--trg path_to_new_project设置所有必需的文件。使用-f允许 正在覆盖现有文件。有关更多选项,请参见makepy--help

makepy+make

一些makepy功能仍然只能通过使用 包括文件等。你可以 在你的项目中使用这些。只需将它们复制到项目中的makedir,然后include 在您的makefile中,由此项目完成。有关详细信息和帮助,请参阅每个mk文件。

目标

一般来说,该项目旨在提供一些灵活的工具和模块,以帮助 开发python模块、库和命令行工具的日常python编程任务。 它旨在捕获最佳实践并使其可重用,从而允许您编写越来越少的 可读代码,不会破坏增强模块和工具的灵活性或兼容性。

动机

大多数python程序员都知道argparseloggingstructlogtoxpip,许多还使用tween设置工具和其他。但是,当使用这些工具时,您将编写 一次又一次相同或非常相似的样板代码。

我不想重复我自己,我想从我的项目中提取最常见的实践 并提供给我的下一个项目和其他人使用。

历史记录

要设置loggingargparse的实用程序模块分散在几个私有的 项目(并在公司项目中重新实施)。大多数makepy命令都位于 在我最终 开始将功能移植到makepy。仍保留一些make功能,可以在 此项目的mk文件,例如make标记make publish

我会不断更新makepy,并在以后的学习中不断学习,我很高兴欢迎pull请求。

玩得开心!

未决问题/任务

  • 为名称空间添加Python2支持。
  • 端口文档字符串+创建已读的文档。
  • 端口版本管理,使用外部bumpversion命令。
  • 制造商提供的端口集成测试。
  • 来自Make的Port Docker测试。
  • 从Make发布左轮。
  • make+删除make相关代码的端口剩余部分。

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

推荐PyPI第三方库


热门话题
java递归计算幂时,我不理解方法的输出   安卓在nativescript中编写java文件以使用本机java库   java应用程序运行时如何调用setUnderatted()?   java如何解决大堆问题和垃圾收集暂停   Windows>Unix上UTF8/ISO88591编码的java问题   JAVA使用launch4j创建exe文件后未运行   算法log n time constrait(Java)应该使用什么数据结构?   java迭代数组并创建另一个数组的最佳实践   java Spring boot 1.5.2。Release DefaultRolesPrefixPostProcessor不会删除默认的“角色”前缀   java高效的okio源代码由已分配的ByteString支持?   在Java中将文本文件读取到int数组   我们可以从数据库(MySql)向java类发送触发器吗   java实现嵌入在接口中的类   macos如何在应用程序位于托盘中时在Dock中隐藏Java SWT程序图标   规范化字符串以在Java中创建安全URL   java如果由于CMS gc算法中的关键内存碎片而无法分配内存,会发生什么情况   Java中的进一步拆分数组   java我怎样才能得到它。循环中Firebase的addOnCompleteListener()方法?   java使用服务负责人和邮递员访问power bi组和报告