代码之家  ›  专栏  ›  技术社区  ›  Pubudu Dodangoda

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

  •  2
  • Pubudu Dodangoda  · 技术社区  · 7 年前

    背景故事 我有一个python项目,它使用setuptools构建源代码发行版。Pylint集成用于运行测试。我出身于一个很重的诺德家。

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

    • 运行测试
    • 运行pylint
    • 清除生成/分发目录
    • 使用setuptools和distutils构建源分发
    • 等等等等等等

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

    • 使用安装程序包 pip install -r requirements.txt
    • 激活virtualenv
    • 触发预提交(&M);预推git挂钩(尚未实现)

    在NodeJs项目中,我可以使用 之前 邮递 包中的下标。json文件,它以一种非常好的方式完成了这项工作。

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

    如何以优雅的方式自动化这些步骤 蟒蛇的 方法

    2 回复  |  直到 7 年前
        1
  •  2
  •   Dodge Sagar Bahadur Tamang    4 年前

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

    通过将多个命令参数传递给 setup.py 脚本:

    $ python setup.py clean test lint sdist build_doc upload
    

    如果工具不提供 distutils 例如,命令 pylint 没有,所以你需要 setuptools-lint 的程序包 python setup.py lint 工作。

    可以使用与节点项目类似的方法为命令集声明别名。创建 setup.cfg 文件旁边的 设置。py公司 并添加别名:

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

    现在,上面的命令与

    $ python setup.py ci
    

    至于其他要求,可能 Pipenv 是最具可比性的工具 node . 它具有自动创建和激活特定于项目的虚拟环境、安装来自 Pipfile ,锁定依赖项版本(类似于 shrinkwrap 命令),等等。

    编辑

    您还可以编写自定义命令并将其绑定到安装脚本中。示例 ls 运行的命令 ls -l :

    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='nobody@nowhere.com',
        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
    
        2
  •  0
  •   user9108749 user9108749    7 年前

    如果你同意用图书馆来做这个, paver 是一个选项。文档 here 说明在不更改项目中使用setuptools的方式的情况下使用铺装器的方式。