Release Notes
0.9.28 (2025-09-17)
- Added
NumpyDates: NumPy-compatible DateTime64/TimeDelta64 types and units. - Added
pyconvertrules for NumpyDates types. - Added
PyArraysupport for NumPy arrays ofdatetime64andtimedelta64. - Added
juliacall.ArrayValuesupport for Julia arrays ofInlineDateTime64andInlineTimeDelta64. - If
JULIA_PYTHONCALL_EXEis a relative path, it is now considered relative to the active project. - Added option
JULIA_PYTHONCALL_EXE=@venvto use a Python virtual environment relative to the active project. - Added
PYTHON_JULIACALL_EXEandPYTHON_JULIACALL_PROJECTfor specifying the Julia binary and project to override JuliaPkg. - Adds methods
Py(::AbstractString),Py(::AbstractChar)(previously only builtin string and char types were allowed). - Adds methods
Py(::Integer),Py(::Rational{<:Integer}),Py(::AbstractRange{<:Integer})(previously only builtin integer types were allowed). - Adds method
pydict(::Pair...)to construct a pythondictfromPairs, similar toDict. - Bug fixes.
- Internal: switch from Requires.jl to package extensions.
0.9.27 (2025-08-19)
- Internal: Use heap-allocated types (PyType_FromSpec) to improve ABI compatibility.
- Minimum supported Python version is now 3.9.
- Better compatibility with libstdc++.
0.9.26 (2025-07-15)
- Added PySide6 support to the GUI compatibility layer.
- Added FAQ on interactive threads.
- Added CI benchmarking suite.
- Bug fixes.
0.9.25 (2025-05-13)
- Added
PYTHON_JULIACALL_HEAP_SIZE_HINToption to configure initial Julia heap size. Base.elsizenow defined forPyArray.- JuliaCall now ensures a version of OpenSSL_jll compatible with Python is installed.
0.9.24 (2025-01-22)
- Bug fixes.
0.9.23 (2024-08-22)
- Bug fixes.
0.9.22 (2024-08-07)
- Finalizers are now thread-safe, meaning PythonCall now works in the presence of multi-threaded Julia code. Previously, tricks such as disabling the garbage collector were required. Python code must still be called on the main thread.
GC.disable()andGC.enable()are now a no-op and deprecated since they are no longer required for thread-safety. These will be removed in v1.- Adds
GC.gc(). - Adds module
GILwithlock(),unlock(),@lockand@unlockfor handling the Python Global Interpreter Lock. In combination with the above improvements, these allow Julia and Python to co-operate on multiple threads. - Adds method
_jl_call_nogiltojuliacall.AnyValueandjuliacall.RawValueto call Julia functions with the GIL unlocked.
0.9.21 (2024-07-20)
Serialization.serializecan usedillinstead ofpickleby setting the env varJULIA_PYTHONCALL_PICKLE=dill.numpy.bool_can now be converted toBooland other number types.datetime.timedeltacan now be converted toDates.Nanosecond,Microsecond,MillisecondandSecond. This behaviour was already documented.- In JuliaCall, the Julia runtime is now properly terminated when Python exits. This means all finalizers should always run.
- NULL Python objects (such as from
pynew()) can be safely displayed in multimedia contexts (VSCode/Pluto/etc.)
0.9.20 (2024-05-01)
- The IPython extension is now automatically loaded upon import if IPython is detected.
- JuliaCall now compatible with Julia 1.10.3.
- Minimum supported Python version is now 3.8.
0.9.19 (2024-03-19)
- Bug fixes.
0.9.18 (2024-03-18)
- Bug fixes.
0.9.17 (2024-03-16)
- Bug fixes.
0.9.16 (2024-03-14)
- Big internal refactor.
- New unexported functions:
python_executable_path,python_library_path,python_library_handleandpython_version. Pyis now treated as a scalar when broadcasting.PyArrayis now serializable.- Removed compatibility with Julia 1.10.1 and 1.10.2 (to be fixed in 1.10.3 and 1.11.0) due to an upstream bug.
- Bug fixes.
0.9.15 (2023-10-25)
- JuliaCall now supports
-X juliacall-startup-file=noto disable running startup.jl. - If you are using CondaPkg then Python can optionally now be installed from the anaconda channel (instead of only conda-forge).
- Bug fixes.
0.9.14 (2023-07-26)
- Wrapped Julia values support truthiness (
__bool__) better: all values are true, except for zero numbers and empty arrays, dicts and sets. - JuliaCall now supports the Julia
--handle-signalsoption. Setting this toyesallows allocating multithreaded Julia code to be called from JuliaCall without segfaulting. The default isnowhile compatibility concerns are investigated, and may be changed toyesin a future release.
0.9.13 (2023-05-14)
- Conversion to wrapper types
PyList,PySet,PyDictorPyIterablenow default to having element typeAnyinstead ofPy. - The
__repr__method of wrapped Julia objects now uses the 3-arg show method for nicer (richer and truncated) display at the Python REPL. - The IPython extension can now be loaded as just
%load_ext juliacall. - The
%%juliaIPython magic can now synchronise variables between Python and Julia. - Bug fixes.
0.9.12 (2023-02-28)
- Bug fixes.
0.9.11 (2023-02-15)
- In
PyArray{T}(x), the eltypeTno longer needs to exactly match the stored data type. Ifxhas numeric elements, then any number typeTis allowed. Ifxhas string elements, then any string typeTis allowed. StaticString(the inline string type used byPyArray) supports theAbstractStringinterface better.
0.9.10 (2022-12-02)
- Bug fixes.
0.9.9 (2022-10-20)
- Bug fixes.
0.9.8 (2022-10-18)
- Adds
line_bufferingoption toPyIO. - Improvements to stdout when using
juliacall.ipythonincluding line-buffering.
0.9.7 (2022-10-11)
- If CondaPkg is using the Null backend, PythonCall will now use
pythonfrom the PATH. - Bug fixes.
0.9.6 (2022-09-09)
- When using JuliaCall from an interactive Python session, Julia is put into interactive mode:
isinteractive()is true, InteractiveUtils is loaded, and a nicer display is used. - Wrapped Julia values now truncate their output when displayed via
_repr_mimebundle_. - Numpy arrays with structured dtypes can now be converted to
PyArray, provided the fields are aligned. - Python named tuples can be converted to Julia named tuples.
- Bug fixes.
0.9.5 (2022-08-19)
- Adds
PythonCall.GC.disable()andPythonCall.GC.enable(). - Experimental new function
juliacall.interactive()allows the Julia async event loop to run in the background of the Python REPL. - Experimental new IPython extension
juliacall.ipythonproviding the%juliaand%%juliamagics for executing Julia code. - Experimental new module
juliacall.importerallowing you to write Python modules in Julia. - Bug fixes.
0.9.4 (2022-07-26)
- Bug fixes.
0.9.3 (2022-07-02)
- Bug fixes.
0.9.2 (2022-07-02)
- Many Julia CLI options (such sysimage or number of threads) can be set from JuliaCall.
- Bug fixes.
0.9.1 (2022-06-18)
PyArraycan be constructed using the__array_struct__part of the Numpy array interface. ConstructingPyArray(x)is now about 50x faster, or 175x faster if you fully specify the type.- JuliaCall can now be imported on Apple M1.
0.9.0 (2022-05-27)
- Breaking. Removes
getpy: you may now overloadPydirectly, which now need not always return a new object (e.g. for singletons or wrappers). - Breaking. Conversion rules no longer take a new object every time.
- Breaking. Improved Tables-interface support for
PyPandasDataFrame: better inferred column types; better handling of non-string column names; columns are usually wrappers (PyArrayorPyList). Constructor arguments have changed. Dict methods have been removed (basically only the Tables interface is supported). - Breaking. A
Pywhich is convertible toPyTableis no longer considered to be a table itself; you must convert explicitly. - Adds
pyhasitemand 3-argpygetitem. - Extends
Base.get,Base.get!,Base.haskeyand 2-argBase.hashforPy. PyArraycan now have any element type when the underlying array is of Python objects.- Adds
ArrayValue.to_numpy(). - Bug fixes.
v0.8.0 (2022-03-17)
- Breaking: Removes
pymethodandpyclass. In the future,pyclassmay become sugar fortypes.new_class(namely you can specify a metaclass). - Adds
pyfunc,pyclassmethod,pystaticmethodandpyproperty. pyconvert_add_ruleis now documented. Its semantics have changed, including the separator of the first argument from/to:.- A pandas
<NA>value is now converted tomissing. - A
NaNin aPyPandasDataFrameis converted tomissing. - Breaking: Removes
usingandAsfrom JuliaCall. - Adds
convertto JuliaCall (replacingAs). - Bug fixes.
v0.6.1 (2022-02-21)
- Conversions from simple ctypes types, e.g.
ctypes.c_floattoCfloat. - Conversions from simple numpy types, e.g.
numpy.float32toFloat32. - Bug fixes.
v0.6.0 (2022-02-17)
- Breaking: JuliaCall now uses JuliaPkg to manage Julia dependencies.
- Bug fixes.
v0.5.1 (2022-01-24)
- Bug fixes.
v0.5.0 (2021-12-11)
- Breaking: PythonCall now uses CondaPkg to manage Python dependencies.
- Python objects can be shared with PyCall provided it uses the same interpreter, using methods
PythonCall.Py(::PyCall.PyObject)andPyCall.PyObject(::PythonCall.Py). - Adds
PythonDisplaywhich displays objects by printing to Python'ssys.stdout. Used automatically in IPython in addition toIPythonDisplay. - Removes the
GLOBALmode from@pyexec. Useglobalin the code instead. - Bug fixes.