注:PkgServer 的使用需要 Julia v1.4.0
及以后版本
注:关于 Julia 版本,因为 Julia 目前还处于发展阶段,所以一般的建议是:除非有特殊需求,否则最好使用最新稳定版. 对于国内用户而言,同样不推荐使用 Julia Pro 全家桶系列。
PkgServer 列表
注:如果你在使用 Julia 1.5.0 及以上版本,则默认使用官方服务器 pkg.julialang.org
. 除非有特定需求,否则不需要进行接下来的任何设置就可以使用。
注:对于国内用户,pkg.julialang.org
会自动导向北京、上海或者广州的服务器。(感谢南科大与华为提供的支持,感谢 SJTUG、USTC 镜像站作为国内服务器的上游存储)
- 官方默认服务器:
https://pkg.julialang.org
(会根据地域自动导流到下述的区域服务器上)- 北京
https://cn-northeast.pkg.juliacn.com
- 上海
https://cn-east.pkg.juliacn.com
- 广州
https://cn-southeast.pkg.juliacn.com
- 韩国
https://kr.pkg.julialang.org
- 新加坡
https://sg.pkg.julialang.org
- 北美
https://us-east.pkg.julialang.org
- 更多信息请参考 https://status.julialang.org
- 北京
- 国内镜像站:
-
BFSU 北外开源镜像站:
https://mirrors.bfsu.edu.cn/julia
-
TUNA 清华大学开源镜像站:
https://mirrors.tuna.tsinghua.edu.cn/julia
-
SJTUG 上海交通大学 Linux 用户组:
https://mirrors.sjtug.sjtu.edu.cn/julia
-
USTC 中国科学技术大学开源软件镜像:
https://mirrors.ustc.edu.cn/julia
-
SUSTech 南方科技大学开源镜像站:
https://mirrors.sustech.edu.cn/julia
-
NJU 南京大学开源镜像站:
https://mirrors.nju.edu.cn/julia
-
BFSU 北外开源镜像站:
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"
也可以通过JuliaZH
来切换镜像:
using JuliaZH # 在 using 时会自动切换到国内镜像
JuliaZH.set_mirror("BFSU") # 手动指定为 BFSU 镜像
JuliaZH.mirrors # 查看目前记录的镜像地址
永久使用
通用方法
这里提供一种针对 Julia 的全平台通用的方式: $JULIA_DEPOT_PATH/config/startup.jl
( 默认为 ~/.julia/config/startup.jl
) 文件定义了每次启动 Julia 时都会执行的命令,编辑该文件,添加以下内容即可:
# 在 ~/.julia/config/startup.jl 中添加下面这一行内容
ENV["JULIA_PKG_SERVER"] = "https://pkg.julialang.org"
JuliaZH
提供了一个简易的配置工具来一键修改 startup.jl
:
julia> JuliaZH.generate_startup("default")
┌ Info: 添加 PkgServer
│ 服务器地址 = "https://pkg.julialang.org"
└ 配置文件 = "/root/.julia/config"
julia> JuliaZH.generate_startup("BFSU")
┌ Info: 更新 PkgServer
│ 原服务器地址 = "https://pkg.julialang.org"
│ 新服务器地址 = "https://mirrors.bfsu.edu.cn/julia"
└ 配置文件 = "/root/.julia/config"
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
文件中硬编码的下载地址,例如GR -
Artifacts.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
为方便起见,设置了所有人都可以编辑该帖子来维护服务器列表和使用说明
更新历史
- 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