TL;DR
下载Julia二进制文件 | 配置环境变量JULIA_PKG_SERVER |
---|---|
北京大学镜像站 | https://mirrors.pku.edu.cn/julia |
SJTUG 上海交通大学 Linux 用户组 | https://mirrors.sjtug.sjtu.edu.cn/julia |
NJU 南京大学开源镜像站 | https://mirrors.nju.edu.cn/julia |
同元 Julia 包服务器 | https://releases.tongyuan.cc/juliapkg/original |
注:
- PkgServer 的使用需要 Julia
v1.4.0
及以后版本 - 如果你在使用 Julia 1.5.0 及以上版本,则默认使用官方服务器
pkg.julialang.org
. - 对于国内用户,
pkg.julialang.org
会自动导向北京、上海或者广州的服务器。(感谢南科大与华为提供的支持,感谢 SJTUG、USTC 镜像站作为国内服务器的上游存储) pkg.julialang.org
在国内的服务器因为有带宽限制(5M)所以在速度上依然还是没有高校的镜像站体验好。- 同元包服务器与社区镜像站存在一些差异,见 同元 Julia 包服务器 中的说明
PkgServer 使用说明
切换 PkgServer 只需要修改环境变量 JULIA_PKG_SERVER
即可,下面以默认服务器https://pkg.julialang.org
为例来简单说明其使用方式,根据您自己的网络情况切换不同的 PkgServer 即可。若成功配置,则通过versioninfo()
能看到对应的环境变量,例如:
julia> versioninfo()
Julia Version 1.4.2
Commit 44fa15b150* (2020-05-23 18:35 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin18.7.0)
CPU: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-8.0.1 (ORCJIT, skylake)
Environment:
JULIA_PKG_SERVER = https://pkg.julialang.org
不同的系统和命令行有不同的永久设定环境变量的方式,通过搜索引擎能找到很多这方面的帮助。这里只以 Bash 和 Powershell 为例进行说明。
临时使用
- Windows Powershell:
$env:JULIA_PKG_SERVER = 'https://pkg.julialang.org'
- Linux/macOS Bash:
export JULIA_PKG_SERVER="https://pkg.julialang.org"
也可以通过 PkgServerClient 来切换镜像:
julia> using PkgServerClient # 在 using 时会自动切换到最近的服务器
julia> PkgServerClient.set_mirror("BFSU") # 手动指定为 BFSU 镜像
julia> PkgServerClient.registry_response_time() # 查看所有服务器的延迟
Dict{String, Float64} with 8 entries:
"BFSU" => 0.0323085
"OpenTUNA" => 0.146376
"SJTUG" => 0.0093373
"USTC" => 0.230767
"SUSTech" => 0.269097
"TUNA" => 0.184747
"JuliaLang" => Inf
"NJU" => 0.0445983
永久使用
通用方法
这里提供一种针对 Julia 的全平台通用的方式: $JULIA_DEPOT_PATH/config/startup.jl
( 默认为 ~/.julia/config/startup.jl
) 文件定义了每次启动 Julia 时都会执行的命令,编辑该文件,根据需要选择以下两种中的一种即可:
# 每次打开 Julia 都使用固定的 pkg server
ENV["JULIA_PKG_SERVER"] = "https://pkg.julialang.org"
# 每次打开 Julia 都自动切换到最近的 pkg server
if VERSION >= v"1.4"
try
using PkgServerClient
catch e
@warn "error while importing PkgServerClient" e
end
end
Linux/macOS Bash
Linux/macOS bash下可以通过修改 ~/.bashrc
文件来实现该目的:
# 在 ~/.bashrc 中添加下面这一行内容
export JULIA_PKG_SERVER="https://pkg.julialang.org"
Windows
路径:(右键)我的电脑 → 属性 → 高级系统设置 → 环境变量
在用户变量或者系统变量栏下 新建
来添加JULIA_PKG_SERVER
即可
常见问题
PkgServer 和 PkgMirrors 有什么区别?
目前国内已经没有可用的 PkgMirrors 镜像站,请直接使用 PkgServer
官方服务器 (Pkg server) 与BFSU镜像站 (Storage server) 的区别?
官方Pkg server服务器是动态缓存性质的服务器,它本身并不存储整个Julia数据,因此当缓存未命中时,它需要临时从上游存储服务器下载数据,这个时候下载速度会变得十分缓慢。相比而言,Storage server 则是一个简单的静态 HTTP 服务器:它存储了完整的Julia生态所需的数据,因此使用时不会遇到缓存未命中的情况。另一方面,pkg server对于服务器的硬件需求非常小,因此可以不需要太高成本地部署到世界各地,而storage server则只会部署极其有限的数量(目前仅有两台)
根据 Pkg & Storage 协议的设计,Julia 用户不应该直接与 Storage server 进行连接,因为这将失去很多 Pkg server 提供的服务优化机制,例如:版本更新时只作增量下载,artifacts只下载需要的部分。
换句话说,直接使用BFSU 镜像站实际上违背了这一设计初衷,但是目前来看,由于BFSU的服务器带宽资源非常充裕,即使不采用这些优化机制,它的服务质量也比国内现存的 Pkg server 要好。
哪些内容会被镜像?
以BFSU北外镜像站为例,目前仅包含 General 以及 General 注册表中记录的包。对于未注册到 General 中的包是无法镜像的,例如若以下面这种指定 URL 的方式来装包的话,所有数据依然会从原始地址进行下载。
]add Flux#master
]add https://github.com/FluxML/Flux.jl.git
Pkg.add(PackageSpec(url="https://github.com/FluxML/Flux.jl.git"))
为什么 build 过程还是很慢?
有两类数据不会被镜像:
build.jl
文件中硬编码的下载地址,例如GRArtifacts.toml
中没有给出download
项的资源, 例如TestImages
在安装这两类包时,部分数据依然是从原始地址进行下载,所以在网络不稳定时,build 过程依然会耗时很长或者失败。
为什么还是从 github 更新 General?
如果你看到下面这张图的话,说明你的 General
注册表依然是从原始地址(Github)进行更新,这是因为早期的 Julia 在拉取 General 时是通过 git clone 的方式进行的,为了保证Julia 版本的向前兼容,所以会依旧采用 git clone 的方式进行。
简单的解决方案是直接重置 General 注册表,这样它会直接从镜像站拉取数据
(@v1.4) pkg> registry rm General
(@v1.4) pkg> registry add General
但需要注意的是:这样一来在使用 1.4 之前 Julia 就会因为不支持 PkgServer 的原因而无法更新 General 了。(除非有特别理由,对于国内用户,我们推荐使用 Julia 1.4 及更新的版本)
JuliaPro 如何设置 BFSU 镜像站
不,你并不想用 JuliaPro. 对于国内用户而言,强烈推荐使用 julia + Atom/VSCode/Ijulia 等自行搭建环境的方式来使用。
JuliaPro 有一个PkgServer的验证过程,而 BFSU 镜像并不是一个典型的PkgServer,所以实际上并不支持这一功能。换句话说,你需要手动做一些调整来骗过 JuliaPro。
其他信息
- julia的包管理新手入门(After V1.4)
- Pkg/Storage 协议的设计文档
- 自建PkgServer: PkgServer.jl
- 自建Storage Server: PkgServer.jl/gen_static 或者 StorageServer.jl
为方便起见,设置了所有人都可以编辑该帖子来维护服务器列表和使用说明
更新历史
- 20231221 @johnnychen94 增加同元包服务器
- 20230327 @johnnychen94 移除 BFSU、TUNA 镜像源,添加 PKU 镜像源
- 20211008 @johnnychen94 使用 PkgServerClient 来自动切换镜像站
- 20210403 @johnnychen94 添加 NJU 和 SUSTech 镜像站
- 20201008 @johnnychen94 deprecate PkgMirrors
- 20201008 @johnnychen94 添加USTC镜像站
- 20200822 @johnnychen94 更新BFSU镜像站的URL,以及在指南中不再建议使用 BFSU 的 julia-general.git 镜像
- 20200822 @johnnychen94 添加TUNA镜像站
- 20200805 @johnnychen94 添加SJTU镜像站
- 20200805 @johnnychen94 删除ECNU校内镜像站,因为这个仅限局域网访问
- 20200710 @johnnychen94 说明官方Pkg server 与BFSU镜像的差异
- 20200707 @johnnychen94 更新国内PkgServer
- 20200628 @johnnychen94 BFSU镜像站提供了General的镜像仓库,因此不再维护gitee上的版本
- 20200628 @johnnychen94 因为失效,删除 @WeiMing 提供的 PkgServer
- 20200618 @woclass 添加 TOC