我有一个后端算法,可以让julia调用,我通过PyCall包来实现。然而,julia中的一个包最近更新了,它本身使用了PyCall。无论我尝试做什么,我总是得到一个错误。如果我通过Pkg.build(" pycall ")在julia中设置了PyCall,我可以调用这个包,但是python不能调用julia。如果我通过julia.install()在python3中设置了pycall,那么包就不能在julia中正常运行。
为了重现这一点,这里有一个快速示例:
test.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")test.py
from julia import Main as jl
jl.include("test.jl")如果我运行python3 test.py
我遇到了一个错误,因为特定的python没有通过共享的pycall进行配置。
我想要的是python中的pycall与python中的不同。看起来,如果你在一个里面配置pycall,它会强制另一个。
我试过使用juliacall,但是如果我对它使用pycall,它似乎也会崩溃。
如果我尝试使用ENV["PYTHON"]="python3",我不能运行SAFD包。
任何帮助都将不胜感激,因为我已经在这上面花了几天时间,并尝试了多种解决方案,似乎所有的东西都给了我一个不同的错误。
一些信息:在aws amazon2 linux操作系统和aws r5.large实例上执行此操作。
我使用的是python 3.10.0
版本信息() Julia Version 1.6.3提交ae8452a9e0 (2021-09-23 17:34UTC)平台信息:操作系统: Linux (x86_ 64 -pc-linux-gnu) CPU:英特尔(R)至强(R)白金8175M CPU @2.50 gnu WORD_SIZE: 64 LIBM: libopenlibm LLVM: libLLVM-11.0.1 (ORCJIT,skylake-avx512)
编辑:
我最终弄清楚了这个问题,我试图使用的包更新了它的依赖项,当它构建时,它会自动用它需要的所有包更新conda python。但是,如果它不是由conda构建的,它将假定依赖项存在。让我非常惊讶的是,错误消息从来没有指出任何关于特定包的信息。我只是随机地想出了一点。
有一件事是明确的,你不能有两个不同的python,pycall只为python和julia之间的back和forth配置一个python。
发布于 2021-11-11 15:56:36
你的系统上似乎有两个Python:
ENV["PYTHON"]="";Pkg.build("PyCall")之后安装的第一个Python -->这是在Julia中安装PyCall以使一切正常运行的默认方式(这实际上是一个Miniconda Python)您可以使用python3启动
基本上,将这两个Python混合在一起,并让一切都正常工作,就像是在被蒙住眼睛的海里找到一根针。与此不同的是,您需要使用一个Python来处理所有事情,并使其顺利运行,这应该是Julia在执行ENV["PYTHON"]="";Pkg.build("PyCall")时安装的Miniconda Python。
为了找到要在Julia控制台中使用的Python:
julia> using PyCall
julia> PyCall.python
"/home/ubuntu/.julia/conda3/python.exe"现在,您找到了所需的Python代码!所以你在bash中运行的是:
/home/ubuntu/.julia/conda3/python.exe test.pyhttps://stackoverflow.com/questions/69923433
复制相似问题