Skip to content

Execution error (NullPointerException) at tech.jna.base/fn (base.clj:35). #13

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
PlumpMath opened this issue Dec 8, 2019 · 15 comments
Closed

Comments

@PlumpMath
Copy link

PlumpMath commented Dec 8, 2019

Clojure 1.10.1
user=> (ns user (:require [libpython-clj.python :as py]))
Execution error (NullPointerException) at tech.jna.base/fn (base.clj:35).
null

I'm use python 3.7 and compile project as lein uberjar.

Thanks.

@jjtolton
Copy link
Contributor

jjtolton commented Dec 8, 2019

Hi! Can you post some more details please? What system are you using, what version of libpython-clj, what repl, etc?

@jjtolton
Copy link
Contributor

jjtolton commented Dec 8, 2019

Great, did you get it working? :D That's the most important thing!

@PlumpMath
Copy link
Author

{:clojure.main/message
"Execution error (NullPointerException) at tech.jna.base/fn (base.clj:35).\nnull\n",
:clojure.main/triage
{:clojure.error/class java.lang.NullPointerException,
:clojure.error/line 35,
:clojure.error/symbol tech.jna.base/fn,
:clojure.error/source "base.clj",
:clojure.error/phase :execution},
:clojure.main/trace
{:via
[{:type clojure.lang.Compiler$CompilerException,
:message "Syntax error macroexpanding at (base.clj:34:7).",
:data
{:clojure.error/phase :execution,
:clojure.error/line 34,
:clojure.error/column 7,
:clojure.error/source "base.clj"},
:at [clojure.lang.Compiler$InvokeExpr eval "Compiler.java" 3707]}
{:type java.lang.NullPointerException,
:at [tech.jna.base$fn__15233 invokeStatic "base.clj" 35]}],
:trace
[[tech.jna.base$fn__15233 invokeStatic "base.clj" 35]
[tech.jna.base$fn__15233 invoke "base.clj" 34]
[clojure.lang.AFn applyToHelper "AFn.java" 154]
[clojure.lang.AFn applyTo "AFn.java" 144]
[clojure.lang.Compiler$InvokeExpr eval "Compiler.java" 3702]
[clojure.lang.Compiler$DefExpr eval "Compiler.java" 457]
[clojure.lang.Compiler eval "Compiler.java" 7182]
[clojure.lang.Compiler load "Compiler.java" 7636]
[clojure.lang.RT loadResourceScript "RT.java" 381]
[clojure.lang.RT loadResourceScript "RT.java" 372]
[clojure.lang.RT load "RT.java" 459]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" 6109]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$load_one invokeStatic "core.clj" 5908]
[clojure.core$load_one invoke "core.clj" 5903]
[clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
[clojure.core$load_lib invokeStatic "core.clj" 5947]
[clojure.core$load_lib doInvoke "core.clj" 5928]
[clojure.lang.RestFn applyTo "RestFn.java" 142]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$load_libs invokeStatic "core.clj" 5985]
[clojure.core$load_libs doInvoke "core.clj" 5969]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$require invokeStatic "core.clj" 6007]
[clojure.core$require doInvoke "core.clj" 6007]
[clojure.lang.RestFn invoke "RestFn.java" 421]
[tech.jna$eval14904$loading__6721__auto____14905 invoke "jna.clj" 1]
[tech.jna$eval14904 invokeStatic "jna.clj" 1]
[tech.jna$eval14904 invoke "jna.clj" 1]
[clojure.lang.Compiler eval "Compiler.java" 7177]
[clojure.lang.Compiler eval "Compiler.java" 7166]
[clojure.lang.Compiler load "Compiler.java" 7636]
[clojure.lang.RT loadResourceScript "RT.java" 381]
[clojure.lang.RT loadResourceScript "RT.java" 372]
[clojure.lang.RT load "RT.java" 459]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" 6109]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$load_one invokeStatic "core.clj" 5908]
[clojure.core$load_one invoke "core.clj" 5903]
[clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
[clojure.core$load_lib invokeStatic "core.clj" 5947]
[clojure.core$load_lib doInvoke "core.clj" 5928]
[clojure.lang.RestFn applyTo "RestFn.java" 142]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$load_libs invokeStatic "core.clj" 5985]
[clojure.core$load_libs doInvoke "core.clj" 5969]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$require invokeStatic "core.clj" 6007]
[clojure.core$require doInvoke "core.clj" 6007]
[clojure.lang.RestFn invoke "RestFn.java" 1289]
[tech.v2.datatype$eval14898$loading__6721__auto____14899
invoke
"datatype.clj"
1]
[tech.v2.datatype$eval14898 invokeStatic "datatype.clj" 1]
[tech.v2.datatype$eval14898 invoke "datatype.clj" 1]
[clojure.lang.Compiler eval "Compiler.java" 7177]
[clojure.lang.Compiler eval "Compiler.java" 7166]
[clojure.lang.Compiler load "Compiler.java" 7636]
[clojure.lang.RT loadResourceScript "RT.java" 381]
[clojure.lang.RT loadResourceScript "RT.java" 372]
[clojure.lang.RT load "RT.java" 459]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" 6109]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$load_one invokeStatic "core.clj" 5908]
[clojure.core$load_one invoke "core.clj" 5903]
[clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
[clojure.core$load_lib invokeStatic "core.clj" 5947]
[clojure.core$load_lib doInvoke "core.clj" 5928]
[clojure.lang.RestFn applyTo "RestFn.java" 142]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$load_libs invokeStatic "core.clj" 5985]
[clojure.core$load_libs doInvoke "core.clj" 5969]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$require invokeStatic "core.clj" 6007]
[clojure.core$require doInvoke "core.clj" 6007]
[clojure.lang.RestFn invoke "RestFn.java" 3894]
[libpython_clj.jna$eval14890$loading__6721__auto____14891
invoke
"jna.clj"
1]
[libpython_clj.jna$eval14890 invokeStatic "jna.clj" 1]
[libpython_clj.jna$eval14890 invoke "jna.clj" 1]
[clojure.lang.Compiler eval "Compiler.java" 7177]
[clojure.lang.Compiler eval "Compiler.java" 7166]
[clojure.lang.Compiler load "Compiler.java" 7636]
[clojure.lang.RT loadResourceScript "RT.java" 381]
[clojure.lang.RT loadResourceScript "RT.java" 372]
[clojure.lang.RT load "RT.java" 459]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" 6109]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$load_one invokeStatic "core.clj" 5908]
[clojure.core$load_one invoke "core.clj" 5903]
[clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
[clojure.core$load_lib invokeStatic "core.clj" 5947]
[clojure.core$load_lib doInvoke "core.clj" 5928]
[clojure.lang.RestFn applyTo "RestFn.java" 142]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$load_libs invokeStatic "core.clj" 5985]
[clojure.core$load_libs doInvoke "core.clj" 5969]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$require invokeStatic "core.clj" 6007]
[clojure.core$require doInvoke "core.clj" 6007]
[clojure.lang.RestFn invoke "RestFn.java" 805]
[libpython_clj.python.interop$eval14884$loading__6721__auto____14885
invoke
"interop.clj"
1]
[libpython_clj.python.interop$eval14884
invokeStatic
"interop.clj"
1]
[libpython_clj.python.interop$eval14884 invoke "interop.clj" 1]
[clojure.lang.Compiler eval "Compiler.java" 7177]
[clojure.lang.Compiler eval "Compiler.java" 7166]
[clojure.lang.Compiler load "Compiler.java" 7636]
[clojure.lang.RT loadResourceScript "RT.java" 381]
[clojure.lang.RT loadResourceScript "RT.java" 372]
[clojure.lang.RT load "RT.java" 459]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" 6109]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$load_one invokeStatic "core.clj" 5908]
[clojure.core$load_one invoke "core.clj" 5903]
[clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
[clojure.core$load_lib invokeStatic "core.clj" 5947]
[clojure.core$load_lib doInvoke "core.clj" 5928]
[clojure.lang.RestFn applyTo "RestFn.java" 142]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$load_libs invokeStatic "core.clj" 5985]
[clojure.core$load_libs doInvoke "core.clj" 5969]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$require invokeStatic "core.clj" 6007]
[clojure.core$require doInvoke "core.clj" 6007]
[clojure.lang.RestFn invoke "RestFn.java" 551]
[libpython_clj.python$eval14859$loading__6721__auto____14860
invoke
"python.clj"
1]
[libpython_clj.python$eval14859 invokeStatic "python.clj" 1]
[libpython_clj.python$eval14859 invoke "python.clj" 1]
[clojure.lang.Compiler eval "Compiler.java" 7177]
[clojure.lang.Compiler eval "Compiler.java" 7166]
[clojure.lang.Compiler load "Compiler.java" 7636]
[clojure.lang.RT loadResourceScript "RT.java" 381]
[clojure.lang.RT loadResourceScript "RT.java" 372]
[clojure.lang.RT load "RT.java" 459]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" 6109]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$load_one invokeStatic "core.clj" 5908]
[clojure.core$load_one invoke "core.clj" 5903]
[clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
[clojure.core$load_lib invokeStatic "core.clj" 5947]
[clojure.core$load_lib doInvoke "core.clj" 5928]
[clojure.lang.RestFn applyTo "RestFn.java" 142]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$load_libs invokeStatic "core.clj" 5985]
[clojure.core$load_libs doInvoke "core.clj" 5969]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$require invokeStatic "core.clj" 6007]
[clojure.core$require doInvoke "core.clj" 6007]
[clojure.lang.RestFn invoke "RestFn.java" 2088]
[user$eval138$loading__6721__auto____139 invoke "cljIMPORT.clj" 1]
[user$eval138 invokeStatic "cljIMPORT.clj" 1]
[user$eval138 invoke "cljIMPORT.clj" 1]
[clojure.lang.Compiler eval "Compiler.java" 7177]
[clojure.lang.Compiler eval "Compiler.java" 7166]
[clojure.lang.Compiler load "Compiler.java" 7636]
[clojure.lang.Compiler loadFile "Compiler.java" 7574]
[clojure.main$load_script invokeStatic "main.clj" 475]
[clojure.main$script_opt invokeStatic "main.clj" 535]
[clojure.main$script_opt invoke "main.clj" 530]
[clojure.main$main invokeStatic "main.clj" 664]
[clojure.main$main doInvoke "main.clj" 616]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.lang.Var applyTo "Var.java" 705]
[clojure.main main "main.java" 40]],
:phase :execution}}

@PlumpMath
Copy link
Author

PlumpMath commented Dec 8, 2019

hmmm g,.g

java -jar standalone can execute~*

but can't require

libpython-clj/target]$ java -jar libpython-clj-1.17-SNAPSHOT-standalone.jar
Clojure 1.10.1
user=> (require '[libpython-clj :as py])
Execution error (FileNotFoundException) at user/eval1 (REPL:1).
Could not locate libpython_clj__init.class, libpython_clj.clj or libpython_clj.cljc on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.
user=>

I'm linux master (git clone ~)
It worked a few days ago, but... now can't.

Thanks.

@cnuernber
Copy link
Collaborator

hmmm. So running the jar standalone works but attempting to just start a repl and do a require of the main namespace into the user namespace is giving you that error?

@PlumpMath
Copy link
Author

The module will now be loaded.

next problem.

clojure.lang.ExceptionInfo: Failed to load library
{:libname "python3.7m", :paths [[:system ["python3.7m"]] [:java-library-path ["/run/opengl-driver/lib/libpython3.7m.so" "/run/opengl-driver-32/lib/libpython3.7m.so" "/usr/java/packages/lib/libpython3.7m.so" "/usr/lib64/libpython3.7m.so" "/lib64/libpython3.7m.so" "/lib/libpython3.7m.so" "/usr/lib/libpython3.7m.so"]]]}
at tech.jna.base$do_load_library.invokeStatic (base.clj:158)
tech.jna.base$do_load_library.invoke (base.clj:123)
tech.jna.base$load_library.invokeStatic (base.clj:178)
tech.jna.base$load_library.invoke (base.clj:174)
tech.jna.base$do_find_function.invokeStatic (base.clj:213)
tech.jna.base$do_find_function.invoke (base.clj:212)
tech.jna.base$find_function.invokeStatic (base.clj:218)
tech.jna.base$find_function.invoke (base.clj:216)
libpython_clj.jna.interpreter$PySys_SetArgv.invokeStatic (interpreter.clj:66)
libpython_clj.jna.interpreter$PySys_SetArgv.invoke (interpreter.clj:66)
clojure.lang.Var.invoke (Var.java:388)
libpython_clj.python.interpreter$initialize_BANG_$fn__36661.invoke (interpreter.clj:263)
clojure.lang.AFn.applyToHelper (AFn.java:152)
clojure.lang.AFn.applyTo (AFn.java:144)
clojure.core$apply.invokeStatic (core.clj:665)
clojure.core$with_bindings_STAR_.invokeStatic (core.clj:1973)
clojure.core$with_bindings_STAR_.doInvoke (core.clj:1973)
clojure.lang.RestFn.invoke (RestFn.java:425)
libpython_clj.python.interpreter$initialize_BANG_.invokeStatic (interpreter.clj:262)
libpython_clj.python.interpreter$initialize_BANG_.doInvoke (interpreter.clj:249)
clojure.lang.RestFn.invoke (RestFn.java:421)
libpython_clj.python$initialize_BANG_.invokeStatic (python.clj:228)
libpython_clj.python$initialize_BANG_.doInvoke (python.clj:220)
clojure.lang.RestFn.invoke (RestFn.java:397)
new_to_clojure$eval43261.invokeStatic (cljIMPORT.clj:69)
new_to_clojure$eval43261.invoke (cljIMPORT.clj:69)
clojure.lang.Compiler.eval (Compiler.java:7177)
clojure.lang.Compiler.eval (Compiler.java:7132)
clojure.core$eval.invokeStatic (core.clj:3214)
clojure.core$eval.invoke (core.clj:3210)
nrepl.middleware.interruptible_eval$evaluate$fn__14558.invoke (interruptible_eval.clj:112)
clojure.main$repl$read_eval_print__9086$fn__9089.invoke (main.clj:437)
clojure.main$repl$read_eval_print__9086.invoke (main.clj:437)
clojure.main$repl$fn__9095.invoke (main.clj:458)
clojure.main$repl.invokeStatic (main.clj:458)
clojure.main$repl.doInvoke (main.clj:368)
clojure.lang.RestFn.invoke (RestFn.java:1523)
nrepl.middleware.interruptible_eval$evaluate.invokeStatic (interruptible_eval.clj:105)
nrepl.middleware.interruptible_eval$evaluate.invoke (interruptible_eval.clj:74)
nrepl.middleware.interruptible_eval$interruptible_eval$fn__14582$fn__14586.invoke (interruptible_eval.clj:174)
clojure.lang.AFn.run (AFn.java:22)
nrepl.middleware.session$session_exec$main_loop__14686$fn__14690.invoke (session.clj:197)
nrepl.middleware.session$session_exec$main_loop__14686.invoke (session.clj:196)
clojure.lang.AFn.run (AFn.java:22)
java.lang.Thread.run (Thread.java:834)


wrong when you do (py/initialize!).
and my libpython3.7m.so file here
"/run/current-system/sw/lib/libpython3.7m.so"

and I change code to 3.6m to 3.7m (libpython-clj/src/libpython_clj/jna/base.clj)
(def ^:dynamic python-library "python3.7m")
;; (def ^:dynamic python-library "python3.6m")
;; (def ^:dynamic python-library-names ["python3.7m" "python3.6m"])
(def ^:dynamic python-library-names ["python3.7m"])

good day~* :) thanks!

@jjtolton
Copy link
Contributor

jjtolton commented Dec 8, 2019

Sorry you're still having trouble with this! The next major release should be out soon and after that I think we can start to prioritize some better tutorials and "getting started" documentation.

I notice that you're using 1.17-SNAPSHOT. That might be part of the problem. Try with 1.12, 1.13 or 1.16 and see if that helps

@cnuernber
Copy link
Collaborator

The nugget of information here is:

[:java-library-path ["/run/opengl-driver/lib/libpython3.7m.so" "/run/opengl-driver-32/lib/libpython3.7m.so" "/usr/java/packages/lib/libpython3.7m.so" "/usr/lib64/libpython3.7m.so" "/lib64/libpython3.7m.so" "/lib/libpython3.7m.so" "/usr/lib/libpython3.7m.so"]]

my libpython3.7m.so file here "/run/current-system/sw/lib/libpython3.7m.so"

The trick would be to get the java-library-path to include the above directory when starting or for us to find whatever environment variable has that second pathway in it and attempt to read it and setup some state before loading python.

Closing for now but if we can keep going this direction it would be helpful.

@cnuernber
Copy link
Collaborator

@PlumpMath - For conda specifically, I have a workaround:
#18

@PlumpMath
Copy link
Author

I solved ^,.^ yesterday because you gave me hint. thanks.
hmm I dont like conda or venv;; because I don't like sandboxes for some reason. Like Alice in Wonderland. ^,.^;;;

@PlumpMath
Copy link
Author

Anyway, I was lucky to find this project a few days before your announcement of clojure 2019.
I just wanted to handle Python directly from Clojure. I was lucky to find this project. Thank you for making it.

I'm working on 3D related development company job work is clojure and clojurescript and unity3d blender webgl 3d... Onz... I hate ai & ml... cause dont know.

Unfortunately, I can't use this good module freely because I can't English.
But with your help... so Finally, I started doing example code yesterday.

I got a strange question.
The Python module import and Python object usage is a little strange...
In particular, i haven't found the part where we can convert Pyobject. i will find out by watching the blog posts and videos, right?
.
Looking at the document is really a lot of trouble. I just found this on github. hahaha. I'm joking. @.@

Anyway, I'll going to learn linear algebra with this next year... Again, thank you very much for making it.

@jjtolton
Copy link
Contributor

jjtolton commented Dec 12, 2019

As of version 1.20+ you can use require-python. The behavior isn't documented yet because I haven't written up the tests but experiment with this:

(ns myproject.core
  (:require [libpython-clj.python :as python]
            [libpython-clj.require :refer [require-python]))

(require-python '(math requests))

(math/sin 1)
(requests/get "https://www.google.com")

@jjtolton
Copy link
Contributor

We're still actively working on the API, please feel free to join the discussion, @PlumpMath! (https://clojurians.zulipchat.com/#narrow/stream/215609-libpython-clj-dev) I'm also learning to make games with Clojure/Script! :D

@SylvianHemus
Copy link

Having the same problem going to check java path

@SylvianHemus
Copy link

SylvianHemus commented Jun 16, 2022

Not sure what the problem was but for any other noobs, I was having

"Could not locate libpython_clj__init.class, libpython_clj.clj or libpython_clj.cljc on classpath. Please check that namespaces with dashes use underscores in the Clojure file name."

fixed using:

(ns annoying

(:require [libpython-clj2.python :as py]))

(py/initialize! :python-executable "/usr/bin/python3.9"
:library-path "/usr/lib/python3.9")

(require '[libpython-clj2.require :refer [require-python]])
(require-python '[numpy :as np])

From emacs C-c C-k complie works

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants