8

我已经浏览了很多“为 Python 制作”项目,但我找不到任何一个简单的蛋糕文件。我正在寻找的是一个 Python 等价物,它可以让我:

  1. 将构建命令保存在我的项目根目录中的单个文件中
  2. 将每个任务定义为一个简单的函数,并在不带参数的情况下运行“make”文件时自动显示该描述
  3. 导入我的 Python 模块

我正在描绘这样的事情:

from pymake import task, main

@task('reset_tables', 'Drop and recreate all MySQL tables')
def reset_tables():
    # ...

@task('build_stylus', 'Build the stylus files to public/css/*')
def build_stylus():
    from myproject import stylus_builder
    # ...

@task('build_cscript', 'Build the coffee-script files to public/js/*')
def build_cscript():
    # ...

@task('build', 'Build everything buildable')
def build():
    build_cscript()
    build_stylus()

# etc...

# Function that parses command line args etc...
main()

我已经搜索和搜索,但没有找到类似的东西。如果它不存在,我会自己制作并可能用它来回答这个问题。

谢谢你的帮助!

4

4 回答 4

5

自己构建一个简单的解决方案并不难:

import sys

tasks = {}
def task (f):
    tasks[f.__name__] = f
    return f

def showHelp ():
    print('Available tasks:')
    for name, task in tasks.items():
        print('  {0}: {1}'.format(name, task.__doc__))

def main ():
    if len(sys.argv) < 2 or sys.argv[1] not in tasks:
        showHelp()
        return

    print('Executing task {0}.'.format(sys.argv[1]))
    tasks[sys.argv[1]]()

然后是一个小样本:

from pymake import task, main

@task
def print_foo():
    '''Prints foo'''
    print('foo')

@task
def print_hello_world():
    '''Prints hello world'''
    print('Hello World!')

@task
def print_both():
    '''Prints both'''
    print_foo()
    print_hello_world()

if __name__ == '__main__':
    main()

以及使用时的样子:

> .\test.py
可用任务:
  print_hello_world:打印你好世界
  print_foo:打印 foo
  print_both:打印两者
> .\test.py print_hello_world
执行任务 print_hello_world。
你好世界!
于 2012-07-18T10:58:26.843 回答
4

你有没有考虑过使用面料

要使用它来实现您的示例,您只需将其添加到名为的文件中fabfile.py

def reset_tables():
    ''' Drop and recreate all MySQL tables '''
    # ...

def build_stylus():
    ''' Build the stylus files to public/css/ '''
    from myproject import stylus_builder
    # ...

def build_cscript():
    ''' Build the coffee-script files to public/js/* '''
    # ...

def build():
    ''' Build everything buildable '''
    build_cscript()
    build_stylus()

然后你只需要运行fab build构建。您可以运行fab -l以查看可用命令及其描述。

猜猜还值得一提的是,fabric 提供了一些您可能(或可能不)觉得有用的其他功能。除此之外,它还有一些功能可以帮助将文件部署到远程服务器,还有一些功能可以让您通过 ssh 运行远程命令。由于看起来您正在开发一个基于 Web 的项目,您可能会发现这对于创建部署脚本或类似内容很有用。

于 2012-07-18T11:32:26.297 回答
2

有趣的是,有一个名为 Cake 的 Python 构建工具使用与您的示例几乎相同的语法。在这里看到它。

于 2013-01-03T00:45:06.480 回答
0

我只会创建一个标准的 Makefile 而不是找到特定于语言的东西。在我的一些项目中make dbmake test、 等映射到用 Python 编写的脚本,但也可以很容易地使用任何可以从命令行执行脚本的语言。

于 2012-07-18T21:24:59.800 回答