PyCall构建,但无济于事

时间:2019-07-18 22:25:07

标签: python julia pycall

在构建并预编译PyCall之后,我尝试了一些example code来验证其功能。不幸的是,我马上遇到了错误。

julia> import Pkg

julia> Pkg.build("PyCall")
  Building Conda ─→ `C:\Users\Student\.julia\packages\Conda\kLXeC\deps\build.log`
  Building PyCall → `C:\Users\Student\.julia\packages\PyCall\ttONZ\deps\build.log`

julia> import PyCall

julia> math = pyimport("math")
ERROR: UndefVarError: pyimport not defined
Stacktrace:
 [1] top-level scope at none:0

julia> py"""
       import math
       math.sin(math.pi / 4)
       """
ERROR: LoadError: UndefVarError: @py_str not defined
in expression starting at REPL[5]:1

julia> py"import math"
ERROR: LoadError: UndefVarError: @py_str not defined
in expression starting at REPL[6]:1

我在Windows 10 x64上使用Julia 1.1.1(2019-05-16)。我没有在网上看到任何有关此特定问题的信息,现在对此感到沮丧。

1 个答案:

答案 0 :(得分:2)

import进行PyCall时,您必须通过为模块pyimport()加上模块名称本身前缀来指定作用域。

julia> import PyCall

julia> math = PyCall.pyimport("math")
PyObject <module 'math' from '/usr/lib/python3.7/lib-dynload/math.cpython-37m-x86_64-linux-gnu.so'>

julia> math.sin(math.pi/4)
0.7071067811865475

或者,正如Gomiero在讨论中所提到的,也可以通过使用using PyCall将功能引入本地范围来解决您的问题;

julia> using PyCall

julia> math = pyimport("math")
PyObject <module 'math' from '/usr/lib/python3.7/lib-dynload/math.cpython-37m-x86_64-linux-gnu.so'>

julia> math.sin(math.pi/4)
0.7071067811865475

Julia documentation中有更多关于此的内容。