PythonCall.jl icon indicating copy to clipboard operation
PythonCall.jl copied to clipboard

OpenSSL version restriction outdated

Open wilf-phasecraft opened this issue 7 months ago • 3 comments

Just raising this as a new issue, as the previous thread was a question, so I'm aware that my response might not be seen.

I believe Julia now uses a more up to date version of OpenSSL, which is now causing problems when installing certain packages with JuliaCall/PythonCall.

In short, the following error is commonly encountered (on Linux at least)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/wilf/.julia/packages/PythonCall/WMWY0/src/JlWrap/module.jl", line 27, in seval
    return self._jl_callmethod($(pyjl_methodnum(pyjlmodule_seval)), expr)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
juliacall.JuliaError: InitError: could not load library "/home/wilf/.julia/artifacts/a696e1e3e6b8d3c2c4b67609357ebc5c35eabde1/lib/libssl.so"
/lib/x86_64-linux-gnu/libcrypto.so.3: version `OPENSSL_3.3.0' not found (required by /home/wilf/.julia/artifacts/a696e1e3e6b8d3c2c4b67609357ebc5c35eabde1/lib/libssl.so)
Stacktrace:
  [1] dlopen(s::String, flags::UInt32; throw_error::Bool)
    @ Base.Libc.Libdl ./libdl.jl:117
  [2] dlopen(s::String, flags::UInt32)
    @ Base.Libc.Libdl ./libdl.jl:116
  [3] macro expansion
    @ ~/.julia/packages/JLLWrappers/GfYNv/src/products/library_generators.jl:63 [inlined]
  [4] __init__()
    @ OpenSSL_jll ~/.julia/packages/OpenSSL_jll/WaTt1/src/wrappers/x86_64-linux-gnu.jl:16
  [5] run_module_init(mod::Module, i::Int64)
    @ Base ./loading.jl:1134
  [6] register_restored_modules(sv::Core.SimpleVector, pkg::Base.PkgId, path::String)
    @ Base ./loading.jl:1122
  [7] _include_from_serialized(pkg::Base.PkgId, path::String, ocachepath::String, depmods::Vector{Any})
    @ Base ./loading.jl:1067
  [8] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String, build_id::UInt128)
    @ Base ./loading.jl:1581
  [9] _tryrequire_from_serialized(modkey::Base.PkgId, build_id::UInt128)
    @ Base ./loading.jl:1445
 [10] _tryrequire_from_serialized(pkg::Base.PkgId, path::String, ocachepath::String)
    @ Base ./loading.jl:1524
 [11] _require(pkg::Base.PkgId, env::String)
    @ Base ./loading.jl:1990
 [12] __require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1812
 [13] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [14] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [15] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1803
 [16] macro expansion
    @ ./loading.jl:1790 [inlined]
 [17] macro expansion
    @ ./lock.jl:267 [inlined]
 [18] __require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1753
 [19] #invoke_in_world#3
    @ ./essentials.jl:926 [inlined]
 [20] invoke_in_world
    @ ./essentials.jl:923 [inlined]
 [21] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1746
 [22] eval
    @ ./boot.jl:385 [inlined]
 [23] eval
    @ ./Base.jl:88 [inlined]
 [24] pyjlmodule_seval(self::Module, expr::Py)
    @ PythonCall.JlWrap ~/.julia/packages/PythonCall/WMWY0/src/JlWrap/module.jl:13
 [25] _pyjl_callmethod(f::Any, self_::Ptr{PythonCall.C.PyObject}, args_::Ptr{PythonCall.C.PyObject}, nargs::Int64)
    @ PythonCall.JlWrap ~/.julia/packages/PythonCall/WMWY0/src/JlWrap/base.jl:67
 [26] _pyjl_callmethod(o::Ptr{PythonCall.C.PyObject}, args::Ptr{PythonCall.C.PyObject})
    @ PythonCall.JlWrap.Cjl ~/.julia/packages/PythonCall/WMWY0/src/JlWrap/C.jl:63
during initialization of module OpenSSL_jll

To reproduce:

  1. Create a new python venv using python3.12 -m venv .venv
  2. pip install juliacall (by default this installs Julia 1.11.5)
  3. Start python and run
>> from juliacall import Main as jl
>> from juliapkg import add, resolve
>> add("Yao", "5872b779-8223-5990-8dd0-5abbb0748c8c") # other packages with OpenSSL deps also cause the error
>> resolve()
>> jl.seval("using Yao")

Info: Python: 3.12.10 Julia: 1.11.5 OS: Linux

Originally posted by @wilf-phasecraft in #587

wilf-phasecraft avatar May 08 '25 10:05 wilf-phasecraft

Looks like a version mismatch of OpenSSL between Python and Julia. I think JuliaPy/pyjuliapkg#55 should fix this. Can you try it out (see the description in the PR for how) and let me know?

cjdoris avatar May 11 '25 21:05 cjdoris

Great! I'll try it out, thank you

wilf-phasecraft avatar May 15 '25 14:05 wilf-phasecraft

Great! I'll try it out, thank you

I've actually merged and released it and released PythonCall/JuliaCall so you can just update to.try it out.

cjdoris avatar May 15 '25 15:05 cjdoris