python - 如何为类似NodeJs的python项目设置开发环境

标签 python node.js git setuptools setup.py

背景故事 我有一个 python 项目,它使用 setuptools 来构建源代码发行版。 Pylint 集成用于运行测试。我有深厚的 NodeJs 背景。

问题 对代码进行更改后,我有几个步骤应该在分发应用程序之前运行。

  • 运行测试
  • 运行 pylint
  • 清理 build/dist 目录
  • 使用 setuptools 和 distutils 构建源代码分发
  • 等等等等

还有一些其他要求,例如,

  • 使用 pip install -rrequirements.txt 安装软件包
  • 激活虚拟环境
  • 触发预提交和预推送 git hook(尚未实现)

在 NodeJs 项目中,我可以在 package.json 文件中编写一组带有 prepost 下标的 shell 命令,这可以很好地完成这项工作。

目前,对于 python 项目,我使用的是 shell 脚本,它按所需的顺序执行所需的步骤。我想到的另一个选择是使用 package.json 只是为了处理开发环境。但这听起来并不像Pythonic!

如何以优雅的Pythonic方式自动执行这些步骤?

最佳答案

After doing changes to the code, I have several steps which should be run before distributing the application.

您可以通过将多个命令参数传递给 setup.py 脚本来链接多个操作:

$ python setup.py clean test lint sdist build_doc upload

如果工具不提供 distutils 命令,例如 pylint 不提供,您可能需要额外的依赖项,因此您需要 setuptools-lint 包让 python setup.py lint 工作。

您可以使用与 Node 项目类似的方式为命令集声明别名。在 setup.py 旁边创建一个 setup.cfg 文件并添加别名:

# setup.cfg
[aliases]
ci=clean test lint sdist build_doc upload

现在上面的命令与上面的命令相同

$ python setup.py ci

至于其他要求,大概Pipenv是最能与node相媲美的工具。它具有一些简洁的功能,例如自动创建和激活特定于项目的虚拟环境、从 Pipfile 安装软件包、锁定依赖项版本(类似于 shr​​inkwrap 命令)等。

编辑

您还可以编写自定义命令并将它们绑定(bind)到安装脚本中。运行 ls -lls 命令示例:

from distutils.core import Command
from setuptools import setup


class Ls(Command):

    user_options = []

    def initialize_options(self):
        pass

    def finalize_options(self):
        pass

    def run(self):
        self.spawn(['ls', '-l'])


setup(
    name='spam',
    version='0.1',
    author='nobody',
    author_email='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cba5a4a9a4afb28ba5a4bca3aeb9aee5a8a4a6" rel="noreferrer noopener nofollow">[email protected]</a>',
    packages=[],
    cmdclass={'ls': Ls,},
)

现在运行python setup.py ls来调用新命令:

$ python setup.py ls
running ls
ls -l
total 8
drwx------  3 hoefling  wheel   96 16 Dez 19:47 
com.apple.launchd.1X84ONyuu4
drwx------  3 hoefling  wheel   96 16 Dez 19:47 
com.apple.launchd.XbjjBY44Mf
drwxr-xr-x  2 root      wheel   64 16 Dez 19:47 powerlog
-rw-r--r--  1 hoefling  wheel  405 16 Dez 19:50 setup.py

关于python - 如何为类似NodeJs的python项目设置开发环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47847370/

相关文章:

python - 霍夫圆中的参数代表什么以及如何知道使用什么值?

python - 使用配额保护从 python3 定期获取填充 mysql 的通信数据包读取错误。有什么建议吗?

javascript - 删除 JSON 数组中特定索引的对象,不留下 "null"(Node.js)

node.js - 当没有找到记录时,Sequelize findone 查询返回 NULL,我可以将此 NULL 更改为我所有 findOne 查询的空对象吗?

git - 浅克隆对 Travis 和其他 CI 服务的缺点?

c# - Python 中 C# 的 GetBytes() 等价于什么?

python - 如何计算两幅图像之间的协方差?

javascript - Node S3 正在向我发送回具有相似前缀的所有对象

git - jenkins:git fetch 返回状态代码 128: "object file ... is empty"

git - 如何在git中列出版本文件?