Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

591
Views
no se puede llamar al código julia desde Python con PyCall, cuyo código llama a Python con Pycall

Tengo un algoritmo de back-end que hace llamadas de julia, lo hago a través del paquete PyCall. sin embargo, uno de los paquetes en julia se actualizó recientemente y hace uso de PyCall. No importa lo que intente hacer, siempre obtengo un error. Si configuro pycall en julia a través de Pkg.build ("PyCall"), puedo llamar al paquete, sin embargo, python no puede llamar a julia. si configuro pycall en python3 a través de julia.install(), entonces el paquete no puede ejecutarse correctamente en julia.

para reproducir esto aquí hay un ejemplo rápido:

prueba.jl

 using Pkg Pkg.add("PyCall") ENV["PYTHON"]="" Pkg.add(PackageSpec(url="https://bitbucket.org/SSamanipour/safd.jl/src/master/")) Pkg.build("SAFD") Pkg.test("SAFD")

prueba.py

 from julia import Main as jl jl.include("test.jl")

si ejecuto python3 test.py

Aparece un error porque ese python específico no está configurado en el pycall compartido.

lo que me gustaria es que el pycall en python no sea el mismo para python. parece que si configuras pycall en uno forzará el otro.

Intenté usar juliacall, sin embargo, si uso pycall con él, parece que también se rompe.

si intento tener ENV["PYTHON"]="python3" , no puedo ejecutar el paquete SAFD.

Cualquier ayuda sería muy apreciada, ya que llevo unos días en esto y probé varias soluciones y todo parece darme un error diferente.

algo de información: haciendo esto en un sistema operativo aws amazon2 linux y una instancia aws r5.large.

estoy usando python 3.10.0

versioninfo() Julia Versión 1.6.3 Commit ae8452a9e0 (2021-09-23 17:34 UTC) Información de la plataforma: SO: Linux (x86_64-pc-linux-gnu) CPU: Intel(R) Xeon(R) Platinum 8175M CPU @ 2,50 GHz TAMAÑO DE PALABRA: 64 LIBM: libopenlibm LLVM: libLLVM-11.0.1 (ORCJIT, skylake-avx512)

EDITAR:

Terminé resolviendo el problema. El paquete que estaba tratando de usar actualizó sus dependencias, cuando se compila, actualiza automáticamente el conda python con todos los paquetes que necesita. Sin embargo, si no está construido por conda, asumirá que las dependencias están ahí. Lo que me sorprende mucho es que el mensaje de error nunca indicó nada sobre un paquete específico. Solo lo descubrí un poco al azar.

Una cosa está clara es que no puede tener dos pythons diferentes, pycall solo configura un python para ir y venir entre python y julia.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Parece que tienes 2 Python en tu sistema:

  • el primero instalado después de ENV["PYTHON"]="";Pkg.build("PyCall") --> esta es la forma predeterminada de instalar PyCall en Julia para que todo funcione (esto es en realidad un Miniconda Python)
  • sistema Python que comienzas con python3

Básicamente, mezclar esos 2 pitones y hacer que todo funcione es como encontrar una aguja en un pajar con los ojos vendados. En lugar de eso, necesita usar un Python para todo y para que las cosas funcionen sin problemas, debería ser el Miniconda Python que Julia instaló cuando hizo ENV["PYTHON"]="";Pkg.build("PyCall") .

Para encontrar Python, desea usar do en su consola Julia:

 julia> using PyCall julia> PyCall.python "/home/ubuntu/.julia/conda3/python.exe"

¡Ahora encontraste el código de Python que necesitas! Entonces, lo que ejecutas en bash es:

 /home/ubuntu/.julia/conda3/python.exe test.py
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!