[已解决]PyCall包直叫人生死相许,安装一直一直很失败,请求大神们的支援

最近想用Julia的PyPlot画散点图,
但是要用PyPlot的话呢,必须安装PyCall包,
但是。。。一直安装不上!
请求社区的大神们能支援我解决该问题,
也好让其他新手们遇到同样的问题彻底解决该问题。
我的辛酸过程如下:
1.使用Pkg.status(),可以看到PyCall和PyPlot是安装上去了的。但是在用using PyPlot或PyCall的时候就出现一大堆错误了,详细错误如下:


2.使用Pkg.build(“PyCall”),依旧一大堆错误,详细错误如下:



3.看到错误代码堆里有出现关键字,比如.NET Fram 3.0或更迟的版本之类的提示,然后去控制面板看是否安装了,没错啊,有安装啊。

Pycall6
4.然后查看Python的环境变量,也是有啊。
Pycall7
5.然后在Julia交互界面输入:
ENV[“PYTHON”]=“pythoncommand”
Pkg.build(“PyCall”)
为什么还是不行呢?气死我了!

6.至此,一直未解决!!!
请求各位大神们Help me,please!

1 个赞

你设置了PYTHON环境变量吗?我看你只是加了个PATH而已


仔细看了一眼它说的PYTHON="pythoncommand"的意思是“把我改成python命令的路径”,谁让你照抄了…

用linux子系统吧

用WSL也得(effectively)配置环境变量的呀 和系统没关系

是这样吗?Julia>ENV[“PYTHON”]=“C:\Users\Administrator\AppData\Local\Programs\Python\Python36”
我的python.exe在这个目录下


我可能或者是一个白痴。

理论上是这样的,带上python.exe。你试一下

都不行哦,报错哦。
Pycall12

搞定!是这样哦,
ENV[“PYTHON”]=“python.exe”
Pkg.build(“PyCall”)
Pycall13

嗯,好像有点不对劲![Info:Precompiling 。。。。。]
预编译是什么意思?

1.卸载JuliaPro v1.2.0-1…
2.把所有关联JuliaPro的文件夹全删除…
3.重启电脑…
4.打开之前安装的Julia v1.2.0.exe桌面生成的julia.exe快捷方式
【注:发现和安装的JuliaPro v1.2.0-1.exe没有什么卵关系,都是独立的,只不过JuliaPro依赖Atom的IDE而已,在julia.exe的REPL交互界面(类cmd窗口的那种界面)安装的包根本不会关联到JuliaPro v1.2.0-1里】
5.using PyPlot
using PyCall
咦!竟然不会弹出[Info: Precompiling …]了
真是见了鬼了咯!

几乎一整天都在弄这个PyCall,最终还是弄好了。
我发现Julia语言生成散点图比Python快多了,还不卡,
而用Python的Matplotlib库画大量数据的散点真是卡得一比
(特别是拖动图片那感觉真TM不爽)。
Julia还好,不错。


让人很不解的是,用同样的方法在JuliaPro的REPL里安装PyCall同样令人心烦,
Pkg.add(“PyCall”)相当于下载(至少我是这么认为的)
Pkg.build(“PyCall”)相当于编译(至少我是这么认为的)
所以PyCall都已经下载了,难道Pkg.build(“PyCall”)的时候也要连接网络的吗?
所以我就Pkg.add和Pkg.build还有Pkg.status[看安装了什么包,里面的清单列出来了不代表可以使用]
所以当你using PyCall的时候可能又有什么错误
然后你不得不又继续你的add和build直到using PyCall不会弹出错误为止。
我不知道这是什么原因,反正我就重复几次操作才能安装上。
还有不知道Pkg.status()这个明明列出了安装以下的包,可是你using的时候就有问题,
有问题你就不要列出来嘛!真是的。
经过:


最后,我的PyPlot不能用。继续摸索中…

都不行哦,报错哦。

大哥 Windows路径是反斜杠 你在字符串里用反斜杠要转义成\\

ENV["PYTHON"]="C:\\Path\\To\\Your\\Python\\Executable.exe"

之所以你写python.exe能运行,是因为你把它所在的文件夹加了PATH。它的本质就是去运行PYTHON这个环境变量给定的命令行,来启动Python。

1 add只是把包clone到本地,build的时候有些包会从网络下载二进制依赖项,网络不好会导致build失败。
2 status显示的是你add的包(当前的Project.toml列出的依赖项),和build状态无关,有包没build成功你就再运行一次build就可以了,不用装了删删了装。
3 build的本质是运行每个包里的build.jl,它愿意干啥就干啥,你不爽就给包作者提issue让他找个靠谱BinDeps方案。
4 模块第一次using的时候会预编译,这是符合预期的。
5 我建议你稍微补一下操作系统和命令行的基础知识,很多时候你的问题是操作不当,不是Julia的问题。而且以后你会遇到更多的问题。

1 个赞

好,这个明白了。谢谢。

太真实了,要是早点看到这篇文章,我也不会被折磨这么久。

您好!请问using PyCall不会报错了,但是using PyPlot会报出ERROR: LoadError: InitError: could not load symbol “Py_CompileString”:
The specified procedure could not be found.请问怎么解决呢?

补充一条,我在32位anaconda的环境下,PyCall这个包build就死活不过。但64位anaconda的环境下就没问题,不知道跟anaconda的版本是否有关系。