Error when importing Python modules in Package namespace
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 38/100
Línea de trabajo
Comienza con el ejemplo MyPkg.jl, el uso de pyimport de PyCall y el stack trace en PyCall.jl:299-318. Reproduce la diferencia entre MyPkg.my_code, MyPkg.my_code2 e include("/MyPkg.jl") en un cuaderno de Jupyter y, después, investiga el comportamiento de precompilación reportado. Se considera terminado cuando el import a nivel de paquete funciona al cargar el paquete instalado, con una prueba de regresión que cubra el caso que falla.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Julia
- Estrellas
- 1.5k
- Forks
- 186
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de JuliaPy/PyCall.jl
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
Todos los issues de JuliaPy/PyCall.jl
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Sienna-Platform/PowerSystemCaseBuilder.jl#239 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
JuliaPluto/Malt.jl#114 ·
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
QuantumSavory/QuantumSavory.jl#592 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
JuliaQUBO/QUBOTools.jl#136 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
Sienna-Platform/PowerFlows.jl#482 ·
Los mantenedores suelen responder en 1 día