安装Taro
# ]激活Pkg模式
add Taro
配置(本步骤的前置条件:已安装jupyter)
这里一定要细看,自己摸索的话,没准就是坑。
Taro依赖于Java软件包。想要调用Taro,必须在启动Julia时,必须传入环境变量JULIA_COPY_STACKS=yes 。
①终端中的启动配置。
一般情况下,我们在终端中进入Julia模式,是以键入 julia 开始的。在不额外配置的情况下,这时,调用Taro会报错。
julia> using Taro
┌ Warning: JavaCall needs the environment variable `JULIA_COPY_STACKS` to be `1` or `yes`.
│ Calling the JVM may result in undefined behavior.
└ @ JavaCall ~/.julia/packages/JavaCall/tjlYt/src/JavaCall.jl:53
想在命令行中正确调用Taro,需要在终端中键入 JULIA_COPY_STACKS=yes julia 以启动Julia。这时,才可以正常调用Taro。
②在jupyter中的使用环境配置。(部分内容,来自于直接向Taro包的作者讨教来的答案。作者真赞,回复很快。)
如果不加配置的话,当在jupyter中调用Taro时
using Taro
,会报错如下:
┌ Warning: JavaCall needs the environment variable `JULIA_COPY_STACKS` to be `1` or `yes`.
│ Calling the JVM may result in undefined behavior.
└ @ JavaCall /home/wangxl/.julia/packages/JavaCall/tjlYt/src/JavaCall.jl:53
JavaCall.JavaCallError("Either the environmental variable JULIA_COPY_STACKS must be 1 OR JavaCall must be used on the root Task.")
Stacktrace:
[1] assertroottask_or_goodenv
@ ~/.julia/packages/JavaCall/tjlYt/src/jvm.jl:236 [inlined]
[2] _init(opts::Vector{String})
@ JavaCall ~/.julia/packages/JavaCall/tjlYt/src/jvm.jl:285
[3] init()
@ JavaCall ~/.julia/packages/JavaCall/tjlYt/src/jvm.jl:277
[4] init()
@ Taro ~/.julia/packages/Taro/7MUCw/src/Taro.jl:21
[5] top-level scope
@ In[1]:2
[6] eval
@ ./boot.jl:373 [inlined]
[7] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1196
为了使用Taro,必须配置jupyter中的Julia环境变量JULIA_COPY_STACKS。
方法1:直接修改jupyter核文件。以我的情况为例(linux),找到位于 /home/wangxl/.local/share/jupyter/kernels/julia-1.7/ 文件夹下的jupyter的kernel配置文件kernel.json。找到 “env”: {}这一行,# 在"env"后的花括号内,插入 “JULIA_COPY_STACKS”: “yes” 。
{
"display_name": "Julia 1.7.2",
"argv": [
"/usr/bin/julia",
"-i",
"--color=yes",
"--project=@.",
"/home/wangxl/.julia/packages/IJulia/e8kqU/src/kernel.jl",
"{connection_file}"
],
"language": "julia",
"env": {
"JULIA_COPY_STACKS": "yes" # 在"env"后的花括号内,加入这一行
},
"interrupt_mode": "signal"
}
重启jupyter,即可。
调用Taro,没报错,表示成功。
using Taro
方法2:新建jupyter核时,设定环境变量"JULIA_COPY_STACKS"=>“yes”。
using IJulia
installkernel("Julia for Taro.jl", env=Dict("JULIA_COPY_STACKS"=>"yes")) # 传入环境变量
重启jupyter,会看到新建的核。
关于installkernel函数的详细说明,可以参考这个链接。若想删除找个核,找到对应文件夹直接手工删除,或者用命令:
rm("/home/wangxl/.local/share/jupyter/kernels/julia-for-taro.jl-1.7",recursive=true)
③配置/home/wangxl/.julia/config/startup.jl 文件,主要是为了在vscode中使用Taro。
打开该上述文件,添加新的一行:ENV[“JULIA_COPY_STACKS”] = “yes”,保存。
如果配置了该文件,在终端和jupyter中都可以不必在配置。
vscode中应该也可以通过配置launch.json来设置,而不影响在终端和jupyter中的表现。熟悉的朋友,可以给指点下。
使用示例(一定要加上 Taro.init())
using Taro, DataFrames
Taro.init() # 一定要加这行
df=Taro.readxl("file.xls", 0,"A1:B5")|>DataFrame
readxl传入的参数中,
第1个:是文件名,xls和xlsx都可以;
第2个:是sheetname,可以是字符串,也可以是整数(索引从0开始,即0代表第1个sheet),此字段默认值为0,可省略;
第3个:是range,单元格范围。目前,这个字段不可省略,不方便。
本篇侧重介绍配置,更详细的说明,请阅读官方文档。另外,Taro不局限于Excel,还可以读写Word、PDF等文档。