我已经完成了许多“make for Python”项目,但我找不到任何cake file的简单性。我正在寻找的是一个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()
我进行了搜索和搜索,但没有发现它。如果它不存在,我会自己做,并可能用它回答这个问题。
感谢您的帮助!
答案 0 :(得分: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 Available tasks: print_hello_world: Prints hello world print_foo: Prints foo print_both: Prints both > .\test.py print_hello_world Executing task print_hello_world. Hello World!
答案 1 :(得分:4)
您是否考虑过使用fabric?
要使用它来实现您的示例,您只需将其添加到名为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的项目,因此您可能会发现这对于创建部署脚本或类似脚本非常有用。
答案 2 :(得分:2)
有趣的是,有一个名为Cake的Python构建工具,它使用与您的示例几乎相同的语法。见here。
答案 3 :(得分:0)
我只是创建一个标准的Makefile,而不是找到特定于语言的东西。在我的一些项目中,make db
,make test
等映射到用Python编写的脚本,但可以很容易地使用任何语言,其脚本可以从命令行执行。