I wrote a command line program jlm to fix some pains in using Julia:
-
We can create multiple projects with new Pkg.jl quite easily. However, switching projects is painful because it causes re-precompilation of the packages.
jlmfixes it by using different precompilation cache for different project (actually any directory once you runjlm init) [1]. -
MKL.jl is a very convenient way to use MKL with Julia. However, using it with standard Julia installation is problematic due to the precompilation issue. See the documentation for how to use
jlmwith MKL.jl. -
It’s possible to create system images to contain a custom set of packages using PackageCompiler.jl. However, again, switching system images invokes the precompilation issue. You can avoid it if you compile the system images in a
jlm-compatible way. I wrote a few recipes to create such system images here: GitHub - tkf/julia-sysimage-recipes: Recipes to build system images for Julia. (But this feature needs some documentation.)
Quick usage quoted from README:
(v1.2) pkg> add JuliaManager ... julia> using JuliaManager julia> JuliaManager.install_cli() ...You need to add
~/.julia/binto$PATHas would be indicated if it
not. Then, you can usejlm:$ cd PATH/TO/YOUR/PROJECT $ jlm init # first run will be slow ... $ jlm run _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.1.0 (2019-01-21) _/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release |__/ | julia>See
jlm --helpor the documentation for more
information.
jlm still is a quite alpha software. It does not support Windows at the moment (although it shouldn’t be difficult) and only tested in Linux. jlm command is implemented in Python and requires Python ≥ 3.5. JuliaManager.jl is tested with Julia 1.0, 1.1, and 1.2-DEV.
[1] This is an implementation of my early proposal RFC: a "workaround" for the multi-project precompilation cache problem without long-term code debt. It turned out I can do this without waiting for my PR to be merged if I “gorilla-patch” the system image. Furthermore, I improved what I proposed a bit so that you don’t need to create a system image for each project (which may take some time). Note that, even though gorilla sounds stronger than monkey, jlm never modifies the original system image. It is designed to not interrupt standard julia usage; if you invoke julia command as usual there should be no effect of jlm.