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

时间:2017-12-16 15:51:14

标签: python node.js git setuptools setup.py

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

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

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

以及其他一些要求,

  • 使用pip install -r requirements.txt
  • 安装软件包
  • 激活virtualenv
  • 触发预先提交& pre-push git hooks(尚未实现)

在NodeJs项目中,我可以在package.json文件中编写一组带有 pre post 下标的shell命令,这些命令以一种非常好的方式完成工作。

目前对于python项目,我使用的是一个shell脚本,它以所需的顺序执行所需的步骤。我想到的另一个选择就是为了处理开发环境而拥有一个package.json。但它不会发出 pythonic!

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

2 个答案:

答案 0 :(得分:2)

  

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

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

$ python setup.py clean test lint sdist build_doc upload

如果某个工具未提供distutils命令,您可能需要其他依赖项,例如pylint没有,因此您需要setuptools-lintpython setup.py lint包来工作

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

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

现在上面的命令与

相同
$ python setup.py ci

至于其他要求,Pipenv可能是与node最相似的工具。它具有简洁的功能,如自动创建和激活项目特定的虚拟环境,从Pipfile安装包,锁定依赖项版本(类似于shrinkwrap命令)等。

修改

您还可以编写自定义命令并在设置脚本中绑定它们。运行ls的{​​{1}}命令的示例:

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

答案 1 :(得分:0)

如果您可以使用库,paver是一个选项。文档here说明了一种在不改变项目中使用setuptools的方式的情况下使用摊铺机的方法。