gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:22:19 24 4
gpt4 key购买 nike

背景故事我有一个 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='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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com