Bazel生成Python的部署文件
https://groups.google.com/forum/#!topic/bazel-discuss/42QRn8qU0eo
我们已经知道,对于:
在Bazel中可以生成静态的二进制文件
我们已经知道,对于:
- Java/Scala/Groovy
在Bazel中可以使用target_name_deploy.jar来生成部署文件
- C++/D/Rust/Go
在Bazel中可以生成静态的二进制文件
- Python
那么对于Python语言,bazel可以使用下面这个工程来支持生成par文件(see github.com/google/subpar)
Subpar
这个是用来在Bazel中协助生成python可执行文件的一个项目。不过并不是Google的一个官方产品。
由于这个项目也是由Bazel来维护的,所以可以直接使用git_repository()来添加到本地WORKSPACE中索引使用:
git_repository( name = "subpar", remote = "https://github.com/google/subpar", tag = "1.0.0", )
然后可以在BUILD文件中添加load()以及调用par_binary()来完成target的定义:
load("@subpar//:subpar.bzl", "par_binary")
par_binary( name = 'foo', srcs = ['foo.py', 'bar.py'], deps = ['//baz:some_py_lib'], data = ['quux.dat'], )
不过如果在已有的BUILD中已有,py_binary()而且不想注释掉的话。需要做如下修改:
py_binary( name = 'foo', # 已有py_binary()的定义和命名 srcs = ['foo.py', 'bar.py'], deps = ['//baz:some_py_lib'], data = ['quux.dat'], )
par_binary( name = 'foo_deploy', # 不能与已有的命名重复 srcs = ['foo.py', 'bar.py'],main = 'foo.py', # 默认会使用name.py作为主入口,因为之前以及加了_deploy后缀,所以需要在main里指示下deps = ['//baz:some_py_lib'], data = ['quux.dat'], )
这样就添加完毕了。
使用的时候可以通过命令:
bazel build //package:foo.par
生成的输出在:
bazel-bin/
package/
foo
foo.par
foo.runfiles/
...
生成的.par文件是一个可执行的二进制文件,可以直接运行:
$ scp bazel-bin/package/foo.par my-other-machine:foo.par
$ ssh my-other-machine ./foo.par
不过这里还是不满足提交到spark上的需求(要么是带class的jar,要么是python脚本),还是要自己动手打包,不能使用这个utility
评论
发表评论