Comments (13)
@duggelz Regarding (4), do you have a link to where that discussion is ongoing?
from subpar.
After spending some time reviewing subpar vs --build_python_zip
, here's a summary of the main differences I've found:
-
The standard rules don't give you a way to specify whether or not you want a zip on a per-target basis (bazelbuild/bazel#3530). This shouldn't be hard to fix.
-
The standard rules' zip file is self-extracting, so it presents the same view of runfiles as any other standard ruleset. In contrast, subpar is only self-extracting when
zip_safe
is false, so by default you can't use the standard runfiles libraries with subpar and have to usepkg_resources
instead. -
The standard rules use a stub file, executed by #!/usr/bin/env python, which unpacks the runfiles, locates the second-stage interpreter, and uses it to execute the payload. Subpar bypasses the stub file and uses the same interpreter for both its own initialization and the payload. This means that subpar can't be used with in-build runtimes (#98). This might be fixed by adding a bootstrapping stage to subpar's initialization or unifying its init logic with the standard rules' stub script.
From my point of view, the most compelling path forward is to add zips as implicit outputs in the standard rules and deprecate subpar. I do wonder if there's anyone really depending on features in subpar they can't otherwise get.
from subpar.
Yes. We have the option in our repo bazelrc.
from subpar.
I'd be quite happy if Bazel adds official support for Python Zip Applications that renders subpar obsolete, but so far the .zip support is incomplete, only available to Windows by default, and makes some interesting design choices.
from subpar.
I'm using --build_python_zip
in Linux and I didn't notice any issues yet. Can you please elaborate in which way the .zip support is incomplete?
from subpar.
I actually find it useful to be able to specify the .par
file as a dependency in other rules, such as docker_build
. IIUC, that's not possible with the --build_python_zip
flag.
from subpar.
As per Bazel devs:
- Feature request for per-target zip functionality on Linux is tracked here: bazelbuild/bazel#3530
- No renaming of targets or extensions planned, Linux and Windows will continue to be slightly different
- runfiles will not be added to Windows or removed from Linux, but work is underway to add helpers to smooth out differences.
- The discussion of google/subpar vs
--build_python_zip
is ongoing.
from subpar.
To the point of @hwright, we have been using the zipped binaries as file dependencies in docker_build
rules without any problems.
from subpar.
@siddharthab Do you have an example where you use rules_docker and the output of --build_python_zip
?
@brandjon I agree, I feel like if py_binary had zipped output, then subpar would no longer need to be supported.
from subpar.
@groodt Not sure how detailed an example you want because it's a simple point. But something like,
py_binary(
name = "bin",
...
)
container_image(
name = "img",
...
files = [":bin"],
)
works just fine for us.
Just the above is enough to package python binaries with their runfiles and our python toolchain (wrappers to ensure correct minor versions of python, etc.) into the docker image as a single zip file.
Repeated invocations of the self-extracting zip however is slow (e.g. calling the binary in a loop), and I wish that there was some documentation that gave instructions or guidance on how to extract once and then call the stub multiple times.
from subpar.
Thanks @siddharthab
So to make sure I understand, do you push the image with:
bazel run //example:img --build_python_zip
?
from subpar.
Yes. We have the option in our repo bazelrc.
Interesting. Thanks! I'll have to try that. The only reason we're currently using subpar is because I couldn't get py_binary working reliably when added as files with rules_docker.
from subpar.
The problem I have with this argument is that your comparing subpar to zip when subpar is shell of what it was suppose to be. Subpar does not support the features that are needed. Anything not full python breaks it. (psutil, netaddress). Its unfortunate that it looks like python is going to get the shaft on this one which of course will make bazel fall out of favor for serious python.
from subpar.
Related Issues (20)
- Fix tests to use proper select() for python version
- Tests fail for centos7 configuration
- Tests may fail when run via `bazel test` HOT 1
- Incompatible search for main files
- Development Best Practices HOT 1
- bazel 0.27.1 deprecated API usages
- Move subpar to the bazelbuild org HOT 1
- Conflicting package names HOT 1
- CODEOWNERS HOT 1
- cython modules import fails when running par file HOT 1
- Why is the generated dpkg_parser having a #!/usr/bin/python3 shebang? HOT 1
- Flag --incompatible_no_implicit_file_export will break Subpar in Bazel 1.2.1
- Flag --incompatible_no_implicit_file_export will break Subpar in a future Bazel release
- [Documentation] Should README setup example use http_archive rather than git_repository? HOT 1
- Running `bazel-bin/*.par ` has ModuleNotFoundError: No module named issue
- Support hermetically built python interperters
- Python cannot run Subpars larger than 2GiB because they are Zip64 formatted.
- Subpar is failing on Bazel CI since the upgrade to Ubuntu 20.04 HOT 1
- Migration guide for existing subpar users now that it is "unmaintained and considered deprecated"?
- Build fails with bazel 0.25 --incompatible_use_python_toolchains HOT 19
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from subpar.