julia - 在 Julia 1.1.0 中使用 pyimport 的问题

标签 julia

我制作了一个模块,其中包含关于核心数量的 if 条件。

module mymodule

import Pkg
import PyCall

using Distributed

if nworkers() > 1
    @everywhere using Pkg
    @everywhere Pkg.activate(".")
    @everywhere Pkg.instantiate()
    @everywhere using PyCall
    @everywhere @pyimport scipy.signal as ss

    function parallel()
          ....
    end

else
    using Pkg
    Pkg.activate(".")
    Pkg.instantiate()
    using PyCall
    @pyimport scipy.signal as ss
    function serial()
    ....
    end
end
end #mymodule

代码在执行时抛出以下错误

ERROR: LoadError: LoadError: UndefVarError: @pyimport not defined
Stacktrace:
 [1] top-level scope
 [2] include at ./boot.jl:326 [inlined]
 [3] include_relative(::Module, ::String) at ./loading.jl:1038
 [4] include(::Module, ::String) at ./sysimg.jl:29
 [5] include(::String) at ./client.jl:403
 [6] top-level scope at none:0
in expression starting at /storage/work/s/mymodule.jl:81
in expression starting at /storage/work/s/mymodule.jl:30

第 81 行是 else 条件下对应于 @pyimport scipy.signal as ss 的行,第 30 行对应于 if nworkers() > 1

在此问题之前,代码在 @everywhere @pyimport scipy.signal as ss 这行有问题,但通过使用 import PyCall 问题消失了;奇怪的是,它并没有解决前一个问题。

有没有人遇到过类似的问题或知道此类问题?

最佳答案

您需要改用 pyimport function。由于解析/评估顺序,宏定义(来自您的using)和该宏在同一 block 中的使用不起作用。

简单改一下代码

@pyimport scipy.signal as ss

ss = pyimport("scipy.signal")

您也可以将 block 分成两部分,第一部分用于定义,第二部分用于使用。但是,我不会那样做 @pyimportis already deprecated.

关于julia - 在 Julia 1.1.0 中使用 pyimport 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55566847/

相关文章:

python - 具有非常量质量矩阵的非线性微分方程的解

julia - 查找内存中单个对象的大小

arrays - 使用嵌套填充创建二维字符串数组

statistics - julia 中的多项式回归 - glm

julia - 是否可以在运行时在 Julia 中创建类型?

julia - `ifelse` 和 Julia 中的三元运算符有什么区别?

julia - 如何在模块内部使用模块外部的函数

package - Julia:我如何在特定版本的包中找到 "fix"?

r - 使用 JuliaCall 将 NA 从 R 传递给 Julia 函数

julia - 如何将多个 CSV 加载到 Julia 中的 DataFrame 中?