如何为类似于 NodeJs 的 python 项目设置开发环境
How to setup a developer environment for a python project similar to NodeJs
背景故事
我有一个 python 项目,它使用 setuptools 来构建源分发。 Pylint 集成用于 运行ning 测试。我来自沉重的 NodeJs 背景。
问题
更改代码后,在分发应用程序之前,我有几个步骤应该是 运行。
- 运行 测试
- 运行 派林特
- 清理 build/dist 个目录
- 使用 setuptools 和 distutils 构建源分发
- 等等等等等等
还有一些其他要求,例如,
- 使用
pip install -r requirements.txt
安装软件包
- 激活虚拟环境
- 触发预提交和预推送 git 挂钩(尚未实现)
在NodeJs项目中,我可以编写一组shell命令,带有pre和post下标在 package.json 文件中,它以非常好的方式完成工作。
目前,对于 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
安装包、锁定依赖版本(类似于 shrinkwrap
命令)等
编辑
您还可以编写自定义命令并将它们绑定到安装脚本中。 ls
命令的示例 运行s 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
如果您可以为此使用库,paver is an option. The documentation here 说明了一种使用摊铺机的方法,而无需更改项目中使用设置工具的方式。
背景故事 我有一个 python 项目,它使用 setuptools 来构建源分发。 Pylint 集成用于 运行ning 测试。我来自沉重的 NodeJs 背景。
问题 更改代码后,在分发应用程序之前,我有几个步骤应该是 运行。
- 运行 测试
- 运行 派林特
- 清理 build/dist 个目录
- 使用 setuptools 和 distutils 构建源分发
- 等等等等等等
还有一些其他要求,例如,
- 使用
pip install -r requirements.txt
安装软件包
- 激活虚拟环境
- 触发预提交和预推送 git 挂钩(尚未实现)
在NodeJs项目中,我可以编写一组shell命令,带有pre和post下标在 package.json 文件中,它以非常好的方式完成工作。
目前,对于 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
安装包、锁定依赖版本(类似于 shrinkwrap
命令)等
编辑
您还可以编写自定义命令并将它们绑定到安装脚本中。 ls
命令的示例 运行s 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
如果您可以为此使用库,paver is an option. The documentation here 说明了一种使用摊铺机的方法,而无需更改项目中使用设置工具的方式。