根据官方教程,在Pkg管理模式下,可以使用add
命令添加包
(@v1.6) pkg > add [package name/package URL/package local directory]
但教程中同样指出,如果要使用未注册的包,必须用URL方式或本地方式加载。此外,add
方法加载的包,相当于对包存储库进行跟踪,采用本地加载时,也必须将本地修改的包代码上传到存储库的某一分支才能使用(没有做过具体测试)。
所以官方提供了dev
命令,可以直接加载本地修改的包,在开发场景中使用
(@v1.6) pkg > dev [package name/package URL/package local directory]
如果要使用未注册的包,同样可以用URL方式或本地方式加载。采用dev
方法加载的包,对路径进行跟踪,即使是注册的包,其使用的包代码也是本地~/.julia/dev/
目录下的代码(可通过设置环境变量 JULIA_PKG_DEVDIR
来更改此路径)。如果修改的代码在云端,必须手动clone
或者pull
。
本文采用Example包作为示例。
注意:以下操作都是在test
环境中进行,检查修改是否成功时注意要切换到test
环境下
在指定文件夹中创建一个新的环境
> mkdir test #创建新文件夹
> cd test
> julia #进入julia环境并切换到包管理模式(按']')
...
(@v1.6) pkg > activate .
(test) pkg > #可以看到进入了当前文件夹的环境
将Example包的代码拉取到本地,并用dev命令加载
> git clone https://github.com/JuliaLang/Example.jl.git
...
(test) pkg > dev ./Example.jl
也可以直接dev Example
,这里我的网络不行,直接dev
无法把代码下载下来。而且直接dev就将代码存入JULIA_PKG_DEVDIR
目录里了。
可以修改./Example.jl/src/Example.jl
中的代码进行测试。
module Example
export hello, domath, test #别忘记在export中加入测试的函数
...
test(str::String) = str * " update exists."
end
保存修改后,进入Julia,如果只修改了函数的一部分,会提示进行了编译
julia > using Example
[ Info: Precompiling Example [7876af07-990d-54b4-ab0e-23690620f79a]
如果没有提示进行编译,可能修改没有被引入。进入包管理模式中进行编译
(test) pkg > precompile
Precompiling project...
✓ Example
1 dependency successfully precompiled in 2 seconds
1 dependency precompiled but a different version is currently loaded. Restart julia to access the new version
重新进入Julia
julia > using Example
julia > test("hello")
"hello update exists."
同样的步骤可以将包源码修改编译后在程序中使用。