背景故事 我有一个python项目,它使用setuptools来构建源代码分发。 Pylint集成用于运行测试。我来自一个沉重的NodeJs背景。
问题 在对代码进行更改之后,我有几个步骤应该在分发应用程序之前运行。
以及其他一些要求,
pip install -r requirements.txt
在NodeJs项目中,我可以在package.json文件中编写一组带有 pre 和 post 下标的shell命令,这些命令以一种非常好的方式完成工作。
目前对于python项目,我使用的是一个shell脚本,它以所需的顺序执行所需的步骤。我想到的另一个选择就是为了处理开发环境而拥有一个package.json。但它不会发出 pythonic!
如何以优雅的 pythonic 方式自动执行这些步骤?
答案 0 :(得分:2)
在对代码进行更改之后,我在分发应用程序之前应该运行几个步骤。
您可以通过将多个命令参数传递给setup.py
脚本来链接多个操作:
$ python setup.py clean test lint sdist build_doc upload
如果某个工具未提供distutils
命令,您可能需要其他依赖项,例如pylint
没有,因此您需要setuptools-lint
个python 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)