Yes, PackageCompiler.jl should work, just slow and huge binaries, that should work with Python and all features. But for smaller binaries:
You can look at:
I’m not sure it’s been announced yet.
PythonCall.jl is also excellent, and also allows you to call Julia from Python. There’s strictly no reason to need to make a Python extension, if you just want to use Julia code with other languages (callable from C, C++ with jluna, Rust and many other languages have packages to call Julia). When calling Python, PythonCall.jl takes care of all the Python dependencies, so it’s easy, not sure about when calling from Python to Julia, if it does the same for Julia. Julia’s package manager is for that, and likely it’s also (as) easy. I just haven’t checked it, since Julia is my main language.
It took me some time to find this back for you, but while looking I also found (I recalled that was the programmer, they’re both excellent):
In-process C Compiler Via Julia!
I’m not sure what I found, that’s not documented and is old, but seems interesting.
That should be documented, it’s not obvious it would be missing. It seems calling C code, using a Julia keyword, would be easy, but I suspect calling C is the easy part, the keyword is about calling a compiled .so binary.
I suppose there’s a workaround, or hopefully soon ccall
will be supported. And the GC. That’s not inherently difficult, and GC only from the runtime should be small. I suppose that would enable a lot more stuff working, possibly I/O without the workarounds.
If you call from Python you have all than I/O, GC on the Python side, or with PythonCall.jl all on both sides.
Note also (Julia can run with 2 KB of RAM):
https://seelengrab.github.io/articles/Running%20Julia%20baremetal%20on%20an%20Arduino/
For static analysis, I would look into JET.jl. I just started trying it out and it gave me 5, then 50 possible errors for rather short code (which is actually working), so a bit intimidating.