dh-virtualenv
BinaryBuilder.jl
dh-virtualenv | BinaryBuilder.jl | |
---|---|---|
4 | 5 | |
1,602 | 379 | |
0.2% | 1.1% | |
0.0 | 6.5 | |
7 days ago | 5 days ago | |
Python | Julia | |
GNU General Public License v3.0 or later | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
dh-virtualenv
-
PyPi root metapackage?
This is how Azure package functions, iirc. I think I used this https://github.com/spotify/dh-virtualenv for similar purpose some time ago.
-
What to do about GPU packages on PyPI?
I'm in a devops role where we actually reroll the Tensorflow whl in-house (to get a few tweaks like specific AVX flags turned on), but because the rest of our deployment is apt/debs, we then turn around and wrap that whl in a deb using Spotify's excellent dh-virtualenv:
https://github.com/spotify/dh-virtualenv
There's no expertise for Bazel in-house; when we run the build, it seems to fail all its cache hits and then spend 12-13h in total compiling, much of which appears to be recompiling a specific version of LLVM.
Every dependency is either vendored or pinned, including some critical things that have no ABI guarantees like Eigen, which is literally pinned to some a random commit, so that causes chaos when other binaries try to link up with the underlying Tensorflow shared objects:
https://github.com/tensorflow/tensorflow/blob/master/third_p...
And when you go down a layer into CUDA, there are even more support matrixes listing exact known sets of versions of things that work together:
https://docs.nvidia.com/deeplearning/tensorrt/support-matrix...
Anyway, I'm mostly just venting here. But the whole thing is an absurd nightmare. I have no idea how a normal distro would even begin to approach the task of unvendoring this stuff and shipping a set of normal packages for it all.
-
Working with Rust in VSCode’s devcontainer: Seamlessly run your Rust programs under a development container in Visual Studio Code.
Rarely do I develop software at my host level, I'm almost always doing it inside of a container or a virtual machine (local or remote), and part of that is simple muscle memory to solve several problems that you've mentioned in your experience with Python, as well as other languages (bonus points for me that I was never plagued by a horrid npm bug). Those are problems that are easily solvable with Docker and a properly formatted requirements.txt (which should only be used in development — use pip/setup.py for proper deployment) and for the rare times when I do need to use Python at the host level of a Linux system, I use Spotify's dh-virtualenv.
-
Is there an excellent Python equivalent for glitch.com?
Maybe I misunderstood the question, but this would be the point of CI/CD and containerization as far as industry standards are concerned. If you had to deploy at host level, then this would be the point of dh-virtualenv that’s tied in by your CI/CD system.
BinaryBuilder.jl
-
Is Julia suitable today as a scripting language?
There are some efforts and the startup times are getting better with every release and there's BinaryBuilder.jl.
-
Because cross-compiling binaries for Windows is easier than building natively
There is the Julia package https://github.com/JuliaPackaging/BinaryBuilder.jl which creates an environment that fakes being another, but with the correct compilers and SDKs . It's used to build all the binary dependencies
-
Discussion Thread
https://binarybuilder.org/. You can do it manually obviously, but this is easier.
-
PyTorch: Where we are headed and why it looks a lot like Julia (but not exactly)
> The main pain point is probably the lack of standard, multi-environment packaging solutions for natively compiled code.
Are you talking about something like BinaryBuilder.jl[1], which provides native binaries as julia-callable wrappers?
--
[1] https://binarybuilder.org
-
What to do about GPU packages on PyPI?
Julia did that for binary dependencies for a few years, with adapters for several linux platforms, homebrew, and for cross-compiled RPMs for Windows. It worked, to a degree -- less well on Windows -- but the combinatorial complexity led to many hiccups and significant maintenance effort. Each Julia package had to account for the peculiarities of each dependency across a range of dependency versions and packaging practices (linkage policies, bundling policies, naming variations, distro versions) -- and this is easier in Julia than in (C)Python because shared libraries are accessed via locally-JIT'd FFI, so there is no need to eg compile extensions for 4 different CPython ABIs (Julia also has syntactic macros which can be helpful here).
To provide a better experience for both package authors and users, as well as reducing the maintenance burden, the community has developed and migrated to a unified system called BinaryBuilder (https://binarybuilder.org) over the past 2-3 years. BinaryBuilder allows targeting all supported platforms with a single build script and also "audits" build products for common compatibility and linkage snafus (similar to some of the conda-build tooling and auditwheel). There was a nice talk at AlpineConf recently (https://alpinelinux.org/conf/) covering some of this history and detailing BinaryBuilder, although I'm not sure how to link into the video.
All that to say: it can work to an extent, but it has been tried various times before. The fact that conda and manylinux don't use system packages was not borne out of inexperience, either. The idea of "make binaries a distro packager's problem" sounds like a simplifying step, but that doesn't necessarily work out.
What are some alternatives?
PyInstaller - Freeze (package) Python programs into stand-alone executables
functorch - functorch is JAX-like composable function transforms for PyTorch.
Nuitka - Nuitka is a Python compiler written in Python. It's fully compatible with Python 2.6, 2.7, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, and 3.11. You feed it your Python app, it does a lot of clever things, and spits out an executable or extension module.
Yggdrasil - Collection of builder repositories for BinaryBuilder.jl
PyOxidizer - A modern Python application packaging and distribution tool
HTTP.jl - HTTP for Julia
pyarmor - A tool used to obfuscate python scripts, bind obfuscated scripts to fixed machine or expire obfuscated scripts.
RDKit - The official sources for the RDKit library
pynsist - Build Windows installers for Python applications
StarWarsArrays.jl - Arrays indexed as the order of Star Wars movies
py2exe - modified py2exe to support unicode paths
mxe - MXE (M cross environment)