我有一个进行 julia 调用的后端算法,我通过 PyCall 包执行此操作。但是,最近更新了 julia 中的一个包,它本身使用了 PyCall。无论我尝试做什么,我总是会出错。如果我通过 Pkg.build("PyCall") 在 julia 中设置 pycall,我可以调用包,但是 python 不能调用 julia。如果我通过 julia.install() 在 python3 中设置 pycall,则该包无法在 julia 中正常运行。
在这里重现这个是一个简单的例子:
测试.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")
测试.py
from julia import Main as jl
jl.include("test.jl")
如果我跑python3 test.py
我遇到一个错误,因为该特定 python 未配置 py 共享 pycall。
我想要的是python中的pycall与python不同。似乎如果您将 pycall 配置为一个,它将强制另一个。
我尝试使用 juliacall,但是如果我将 pycall 与它一起使用,它似乎也会中断。
如果我尝试拥有ENV["PYTHON"]="python3"
,我将无法运行 SAFD 包。
任何帮助将不胜感激,因为我已经在这方面待了几天并尝试了多种解决方案,但一切似乎都给了我一个不同的错误。
一些信息:在 aws amazon2 linux 操作系统和 aws r5.large 实例上执行此操作。
我正在使用 python 3.10.0
versioninfo() Julia 版本 1.6.3 提交 ae8452a9e0 (2021-09-23 17:34 UTC) 平台信息:操作系统:Linux (x86_64-pc-linux-gnu) CPU:Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz WORD_SIZE:64 LIBM:libopenlibm LLVM:libLLVM-11.0.1(ORCJIT,skylake-avx512)
编辑:
我最终解决了这个问题,我尝试使用的包更新了它的依赖项,当它构建时,它会自动使用它需要的所有包更新 conda python。但是,如果它不是由 conda 构建的,它将假定存在依赖项。令我感到非常惊讶的是,错误消息从未表明任何有关特定包的信息。我只是偶然发现了一点。
有一点很清楚,你不能有两个不同的python,pycall只配置一个python用于python和julia之间的来回。