Julia-v0.6 及之前版本
可以按照以下步骤更改 julia 的包目录:
- run
export JULIA_PKGDIR=/your/directory
在 shell 中(或手动添加新的环境变量JULIA_PKGDIR
在窗户上)
- run
Pkg.init()
在 Julia 中初始化一个新的包系统
- copy
REQUIRE
从旧目录到新目录
- run
Pkg.resolve()
在朱莉娅
朱莉娅-v0.7+
新包管理器中的“包目录”称为DEPOT_PATH https://docs.julialang.org/en/latest/base/constants/#Base.DEPOT_PATH,可以通过添加环境变量来改变JULIA_DEPOT_PATH
:
JULIA_DEPOT_PATH=./test julia
julia> DEPOT_PATH
1-element Array{String,1}:
"./test"
(v0.7) pkg> add JSON2
Cloning default registries into /Users/gnimuc/test/registries
使用新的包管理器,我们可以在任何我们想要的目录中创建独立的项目,而不是拥有一个巨大的包目录。每个项目都包含一个Project.toml
and a Manifest.toml
如果它有一些依赖性。这两个文件记录并持续跟踪项目的环境。
UPDATE
以下信息可能已过时。我强烈推荐使用PkgTemplates.jl https://github.com/invenia/PkgTemplates.jl用于在 Julia-v1.0+ 中生成项目。
生成一个新项目
我们可以在任意文件夹中生成一个新项目,但是我们必须cd
到项目文件夹using
该项目。这(v0.7)
下图显示我们仍然处于默认环境中,因此我们无法使用新生成的项目:
(v0.7) pkg> generate ./MyNewProject
Generating project MyNewProject:
./MyNewProject/Project.toml
./MyNewProject/src/MyNewProject.jl
julia> using MyNewProject
ERROR: ArgumentError: Module MyNewProject not found in current path.
Run `Pkg.add("MyNewProject")` to install the MyNewProject package.
Stacktrace:
[1] require(::Module, ::Symbol) at ./loading.jl:868
If we cd
到项目文件夹并activate
环境,那么我们就可以using
我们的新项目没有任何问题:
shell> cd MyNewProject/
/Users/gnimuc/MyNewProject
(v0.7) pkg> activate .
(MyNewProject) pkg>
julia> using MyNewProject
我认为这是新的包管理器和旧的包管理器之间的巨大区别。简而言之,我们需要明确activate
我们未注册的项目/包。
下载并初始化别人的项目
根据文档,我们可以通过添加未注册的包/项目add
命令:
(HelloWorld) pkg> add https://github.com/fredrikekre/ImportMacros.jl
此命令将目标包添加为我们当前项目的依赖项。在这个例子中,我们添加了ImportMacros
in HelloWorld
's Manifest.toml
。如果我们只是把它作为一个顶级项目怎么办?将其添加到默认环境(v0.7)
?不,我们不需要。答案是我们可以直接下载代码,cd
到文件夹并运行instantiate
在 pkg 模式下:
shell> git clone https://github.com/Gnimuc/GLTF.jl GLTF
Cloning into 'GLTF'...
remote: Counting objects: 286, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 286 (delta 73), reused 103 (delta 59), pack-reused 167
Receiving objects: 100% (286/286), 62.16 KiB | 46.00 KiB/s, done.
Resolving deltas: 100% (135/135), done.
shell> cd GLTF
pkg> activate .
(GLTF) pkg> instantiate
Updating registry at `~/.julia/registries/General`
Updating git-repo `https://github.com/JuliaRegistries/General.git`
新的包管理器很棒!我们既不需要“include
before using
“也不要把所有东西都打包成一个包using
它。我们现在有了全功能的“项目”!