Custom Julia system image¶
New in version 0.4.
If you use standard julia
program, the basic functionalities and
standard libraries of Julia are loaded from so called system image
file which contains the machine code compiled from the Julia code.
The Julia runtime can be configured to use a customized system image
which may contain non-standard packages. This is a very effective way
to reduce startup time of complex Julia packages such as PyCall.
Furthermore, it can be used to workaround the problem in statically
linked Python executable if you have the problem described in
Your Python interpreter is statically linked to libpython.
How to use a custom system image¶
To compile a custom system image for PyJulia, run
$ python3 -m julia.sysimage sys.so
where sys.dll
and sys.dylib
may be used instead of sys.so
in Windows and macOS, respectively.
The command line interface julia.sysimage
will:
- Install packages required for compiling the system image in an isolated Julia environment.
- Install PyCall to be compiled into the system image in an isolated Julia environment.
- Create the system image at the given path (
./sys.so
in the above example).
To use this system image with PyJulia, you need to specify its path
using sysimage
keyword argument of the Julia
constructor. For
example, if you run python3
REPL at the directory where you ran the
above julia.sysimage
command, you can do
>>> from julia import Julia
>>> jl = Julia(sysimage="sys.so")
to initialize PyJulia. To check that this Julia runtime is using the
correct system image, look at the output of Base.julia_cmd()
>>> from julia import Base
>>> Base.julia_cmd()
<PyCall.jlwrap `/PATH/TO/bin/julia-py -Cnative -J/PATH/TO/sys.so -g1`>
Limitations¶
PyCall
and its dependencies cannot be updated after the system image is created. A new system image has to be created to update those packages.- The system image generated by
julia.sysimage
uses a different set of precompilation cache paths for each pair ofjulia-py
executable and the system image file. Precompiled cache files generated byjulia
or a differentjulia-py
executable cannot be reused by PyJulia when using the system image generated byjulia.sysimage
. - The absolute path of
julia-py
is embedded in the system image. This system image is not usable ifjulia-py
is removed.
Command line interfaces¶
python3 -m julia.sysimage
¶
Build system image.
Example:
python3 -m julia.sysimage sys.so
Generated system image can be passed to sysimage
option of
julia.api.Julia
.
Note
This script is not tested on Windows.
julia-py
¶
Launch Julia through PyJulia.
Currently, julia-py
is primary used internally for supporting
julia.sysimage
command line interface. Using julia-py
like normal
Julia program requires --sysimage
to be set to the system image
created by julia.sysimage
.
Example:
$ python3 -m julia.sysimage sys.so
$ julia-py --sysimage sys.so