Error when importing Python modules in Package namespace
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
Direzione di ricerca
Inizia con l'esempio MyPkg.jl, l'uso di pyimport di PyCall e lo stack trace in PyCall.jl:299-318. Riproduci la differenza tra MyPkg.my_code, MyPkg.my_code2 e include("/MyPkg.jl") in un notebook Jupyter, quindi analizza il comportamento di precompilazione segnalato. Il lavoro è completato quando l'import a livello di package funziona al caricamento del package installato, con un test di regressione che copra il caso che fallisce.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hi,
I'm trying to write a standalone package that uses PyCall. I thought importing Python modules only once into the global namespace of the package MyPackage would be beneficial for performance. This works when executed in a Jupyter notebook, but not in a separate package.
Here is the code of the package MyPackage:
module MyPkg
using PyCall
np = pyimport("numpy")
function my_code(a)
return np.mean(a)
end
function my_code2(a)
np = pyimport("numpy")
return np.mean(a)
end
end
Install the package and then execute the following in a Jupyter notebook:
using MyPkg
MyPkg.my_code([1., 2.])
Error message:
ArgumentError: ref of NULL PyObject
Stacktrace:
[1] _getproperty(o::PyCall.PyObject, s::Symbol)
@ PyCall ~/.julia/packages/PyCall/ygXW2/src/PyCall.jl:299
[2] __getproperty
@ ~/.julia/packages/PyCall/ygXW2/src/PyCall.jl:312 [inlined]
[3] getproperty(o::PyCall.PyObject, s::Symbol)
@ PyCall ~/.julia/packages/PyCall/ygXW2/src/PyCall.jl:318
[4] my_code(a::Vector{Float64})
@ MyPkg ~/.julia/packages/MyPkg/3Tsby/src/MyPkg.jl:9
[5] top-level scope
@ In[3]:1
[6] eval
@ ./boot.jl:368 [inlined]
[7] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1428
However, this works:
using MyPkg
MyPkg.my_code2([1., 2.])
This also works:
include("<path>/MyPkg.jl")
MyPkg.my_code([1., 2.])
I suspect that the precompilation is somehow interfering, but I know far too little about how imports work in Julia or how PyCall works to be sure.
- Lingua principale
- Julia
- Stelle
- 1.5k
- Fork
- 186
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di JuliaPy/PyCall.jl
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
Meta-Issue: Mutli-threading leads to segfaultsForse già presa @topolarity l’ha presa 211 giorni fa. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
-
Crashes with Julia 1.12 and Revise.jlForse già presa @topolarity l’ha presa 211 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
Tutte le issue di JuliaPy/PyCall.jl
Issue simili
-
Chains resumed from `initial_state` take `num_warmup + 1` warm-up stepsForse già presa @thevolatilebit l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
TuringLang/AbstractMCMC.jl#220 ·
-
found-by-agent
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
exanauts/SparseDirectSolver.jl#92 ·
I maintainer di solito rispondono entro 1 giorno
-
`inv` of a dense matrix fails for arrays whose `parent` is not an array of the same kindForse già presa @devmotion l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
JuliaLang/LinearAlgebra.jl#1740 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
NumericalEarth/Breeze.jl#1051 ·
I maintainer di solito rispondono entro 1 giorno