gpt4 book ai didi

python - 为什么 Python 项目中没有用于自动化的 Makefile?

转载 作者:IT老高 更新时间:2023-10-28 22:09:23 30 4
gpt4 key购买 nike

作为一名资深的 Python 程序员,我想知道,Python 文化的一个核心方面是否让我很长时间都无法理解:我们可以做什么来代替 Makefile?

我见过的大多数 ruby​​ 项目(不仅仅是 rails)都使用 Rake,在 node.js 流行之后不久,就有了 cake。在许多其他(编译和非编译)语言中,都有经典的 Make 文件。

但在 Python 中,似乎没有人需要这样的基础设施。我在 GitHub 上随机挑选了 Python 项目,除了安装之外没有任何自动化,由 setup.py 提供。

这背后的原因是什么?

没有什么可以自动化的吗?大多数程序员是否更喜欢手动运行样式检查、测试等?

一些例子:

  • dependencies 设置 virtualenv 并安装依赖项
  • check 调用 pep8pylint 命令行工具。
  • test 任务依赖于dependencies 启用virtualenv,启动selenium-server 进行集成测试,并调用nosetest
  • coffeescript 任务将所有 CoffeeScript 编译为缩小的 javascript
  • runserver 任务依赖于 dependenciescoffeescript
  • deploy 任务依赖于 checktest 并部署项目。
  • docs 任务使用适当的参数调用 sphinx

其中一些只是一两条线,但恕我直言,它们加起来。由于 Makefile,我不必记住它们。

澄清一下:我不是在寻找 Rake 的 Python 等价物。我对摊铺机很满意。我正在寻找原因。

最佳答案

实际上,自动化对 Python 开发人员也很有用!

Invoke 可能是最接近您的想法的工具,用于自动执行常见的重复 Python 任务:https://github.com/pyinvoke/invoke

使用invoke,您可以创建一个类似这样的tasks.py(从invoke docs借来)

from invoke import run, task

@task
def clean(docs=False, bytecode=False, extra=''):
patterns = ['build']
if docs:
patterns.append('docs/_build')
if bytecode:
patterns.append('**/*.pyc')
if extra:
patterns.append(extra)
for pattern in patterns:
run("rm -rf %s" % pattern)

@task
def build(docs=False):
run("python setup.py build")
if docs:
run("sphinx-build docs docs/_build")

然后您可以在命令行中运行任务,例如:

$ invoke clean
$ invoke build --docs

另一种选择是简单地使用 Makefile。例如,Python 项目的 Makefile 可能如下所示:

docs:
$(MAKE) -C docs clean
$(MAKE) -C docs html
open docs/_build/html/index.html

release: clean
python setup.py sdist upload

sdist: clean
python setup.py sdist
ls -l dist

关于python - 为什么 Python 项目中没有用于自动化的 Makefile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7580939/

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