I have a high-performant function written in Julia, how can I use it from Python?
Assuming your Python and Julia are installed you need to take the following steps.
Run Julia and install
PyCall
using Pkgpkg"add PyCall"
Put your code into a Julia package
using PkgPkg.generate("MyPackage")
In the folder
src
you will findMyPackage.jl
, edit it to look like this:module MyPackagef(x,y) = 2x.+yexport fend
Install pyjulia
python -m pip install julia
(On Linux systems you might want to use
python3
instead ofpython
command)For this step note that while an external Python can be used with Julia. However, for a convenience it might be worthto consider using a Python that got installed together with Julia as
PyCall
.In that case for installation use a command such this one:%HOMEPATH%\.julia\conda\3\python -m pip install julia
or on Linux
~/.julia/conda/3/python -m pip install julia
Note that if you have
JULIA_DEPOT_PATH
variable defined you can replace%HOMEPATH%\.julia
or~/.julia/
with its value.Run the appropiate Python and tell it to configure the Python-Julia integration:
import juliajulia.install()
Now you are ready to call your Julia code:
>>> from julia import Pkg>>> Pkg.activate(".\\MyPackage") #use the correct path Activating environment at `MyPackage\Project.toml`>>> from julia import MyPackage>>> MyPackage.f([1,2],5) [7,9]
It is worth noting that the proposed approach in this answer has several advantages over a standalone Julia file which would be possible, although is less recommended. The advantages include:
- Packages get precompiled (so they are faster in subsequent runs) and can be loaded as a package in Python.
- Packages come with their own virtual environment via 1Project.toml` which makes production deployments much comfortable.
- A Julia package can be statically compiled into Julia's system image which can slash itsloading time --- see https://github.com/JuliaLang/PackageCompiler.jl .