关于julia在ubuntu下翻墙的问题

各位好,
由于在windows下装包各种问题,我弃坑用ubuntu了。现在安装了proxychains4+shadowsocks,并且测试了像proxychains4 firefox,proxychains4 git clone等命令都可以翻墙,但是proxychains4 julia就不能正常翻墙。
此外,我尝试在终端中输入export ALL_PROXY=socks5://127.0.0.1:1080之后再运行julia,也没有效果。
此外,我还配置过git,把git://替换为https://( git config --global url.“https://”.insteadOf git://),也没有效果。

谢谢!
附上proxychains4的配置文件:
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.0/255.0.0.0
quiet_mode

[ProxyList]
socks5 127.0.0.1 1080

最好先确定一下到底是不是“墙”的锅,如果真的是网络问题,一个更稳健的方案是采用路由器上刷SS全局翻墙,这样无论是Windows还是Ubuntu都没问题。但是,绝大多数问题都是可以不用翻墙解决的,这跟具体安装的是什么包有关。这里把Pkg2的坑简单总结一下,也方便以后其他人参考:

Julia-v0.3~v0.6(Pkg2+BinDeps时期)

我接触Julia的时候是v0.3, 那时包管理器就已经是Pkg2了,就是用Pkg.add, Pkg.clone, Pkg.update, Pkg.build等等接口来安装更新卸载package。由于Julia整个生态圈都host在GitHub上,所以包管理器也是基于git开发的。因为Github官方在国内没有服务器,访问的速度比较慢,所以国内的Julian装包成了一个难题,比如首次clone METADATA需要等待很长时间。虽然从Github上下载比较慢,但也不至于最终安不上,装包还有其它比较恼人的大坑:

有额外依赖的包

目前Julia的生态圈远不够成熟,所以有很多库都是通过interop调的其它语言成熟的库,比如PyPlot是通过PyCall调的python的matplotlib,这时就要求用户的网络不仅能正常从GitHub clone PyPlot的源码,还需要在用conda安装matplotlib的过程中网不会挂掉。这个过程中出问题就要反复下载反复build,是有点恶心,但多试几次也还行,就是消磨点耐心。

需要在用户机器上编译二进制依赖的包

有很多基础“轮子”库都是C/C++写的,Julia里有一类包是这些“轮子”库的wrapper,这样在安装这些包的时候必然会需要“轮子”库的二进制,问题是这些二进制文件从哪来?这个时期Julia提供的方案是BinDeps.jl, 基本思路是能利用操作系统的包管理器下载就下,不能下就从源码编译。

Linux & macOS

这些操作系统都带包管理器,比如apt, yum, brew这些,在装依赖的时候也不容易遇到什么网络问题,因此会给人一种错觉: 这些操作系统比较好用–装包的时候坑较少。但当安装一些库需要root权限的时候,安装过程就没那么流畅了。

Windows

Windows上没有包管理器(不算conda), 也没有普遍可用的编译工具,所以BinDeps给出的方案是直接用WinRPM下载交叉编译好的二进制依赖。那么问题来了,从哪下载?国内访问下载源的速度如何?我相信这个时期的Julia Window用户几乎都被这个东西恶心过,WinRPM用的这个download函数简直是万恶之源:

https://github.com/JuliaPackaging/WinRPM.jl/blob/0b05b810f1fbf90b5093122ab5aef5e315d25fc7/src/WinRPM.jl#L55-L73

它retry默认竟然只有5次 :sweat: 为了解决这个问题,群里研究过挺多方案,改IE代理,路由器全局代理等等,我这里一般就是改成用curl下载(Windows不自带,需要自己下载然后添一下环境变量),然后挂手机流量能稳定一些:

一些特别的包

有些需要用到LLVM的包基本上是不支持Windows,比如Clang.jl, Cxx.jl等等, 这些包Julia 1.0之前想在Windows上用就不要想了。

其它: 在公司内网装包各种git error

这个一般配置一下git的全局代理就可以解决

Julia-v0.7alpha+(Pkg3+BB2时期)

目前,上述提到的问题基本上已经得到了解决或正在处于过渡期。Pkg3解决了METADATA太臃肿的问题,用户可以自建registery,package也不一定要host在GitHub上。BinDeps和WinRPM未来应该会被BB2(BinaryBuilder+BinaryProvider)取代, 以后在下载二进制依赖的时候就直接从Github release上下载就OK了,不需要root权限,不需要在用户机器上编译,Linux & macOS & Windows的包安装流程没有什么不同。

2 个赞

可以列出来都是哪些包出的问题,出的问题的error报告,Pkg.status()versioninfo(),有了这些信息才方便别人帮忙诊断。

1 个赞

您好,谢谢您如此细致的回复!我认为是这样,可能不光是墙的问题,但现在面临速度太慢的问题还是必须首先解决的。比如我安装PyPlot这个包都4、5个小时了还是卡着不动。不光是这个包,装其它的包也是一样慢。我在Proxychians4里是可以时实看到连接到了哪些网站的。比如proxychains4 curl www.google.com就可以看到连接到了谷歌。按理说我调用pkd.add应该会连接到github,但是并没有。所以我认为就是没有翻墙成功而导致的所有包都特别慢。。
所以我想问的是应该怎么配置才能让pkg.add也走shawdowsocks的代理呢?
再次感谢!

Pkg用的libgit2, 如果设置git的全局代理也不行,路由器全局翻墙是终极解决方案。

我的理解是,那个翻墙你配置是有问题的;ss的翻墙是socket5翻墙,julia下载包是通过git,socket5不一定支持;所以,需要单独搞一个http代理把socket5代理转成http代理,搜一下shadowsocket privoxy,就能查到了;

好奇的问一下,如果在国内使用R下载package是不是也会很慢。我记得几年前我在国内update我的fedora特别慢。连下个Julia包,都要翻墙,这也太操蛋了。。。

国内的网络环境一天不如一天了。。。 现在用手机流量走移动的网还是比较正常的,运营商的口感觉在限制流量。

可是我用了Proxychains4,它不能把socket5代理转成http代理么

流量少的伤不起阿:joy:

现在流量挺便宜的,日租的那种单包几个G,而且Julia的包也不需要太多流量,来回折腾的时间绝对比流量值钱。

可是用proxychains4 firefox可以翻墙:expressionless:

这也就是说国内的那些想用Julia的人下个包都有问题,还得先学会翻墙,光浏览器翻墙还没用。。。这样下去能有多少新用户啊。

刚刚眇了一眼,省内流量真的全部转为全国流量了。赶紧开热点。哈哈哈哈。因为我在外地,没多少全国流量。所以原来不敢开

1.0之后Julia的包管理器换了,基本上解决了现在的痛点,而且我们国内也有浙大的源。

这个主要还是因为s3是被墙的,pkg3会好点,因为改成从GitHub的CDN上下载了,不过问题就是这个有可能也被墙(比如现在specfunc这个C的库就是被墙的)后面的解决方案只能是在国内搭mirror。

国内具体被墙和运营商有关,我的体验是移动的热点可以访问的网站比较多。这个事情不是Julia有,sublime的插件,atom的插件,还有早期Python的pip其实都有类似的问题。后来Python在国内有豆瓣源才变好的。conda其实如果清华源有时候跪一下也完蛋。

嗯嗯,有空的话在研究一下国内的mirror要怎么用,昨天看见有人发了

这个似乎已经换了BB2,应该不会有问题了吧。GitHub release的好处是即使命令行下载出问题,也可以用下载工具下载,然后手动拷贝到deps里的download。