Julia-v0.6 及之前的版本
可以按照以下步骤更改 julia 的包目录:
- 在shell中运行
export JULIA_PKGDIR=/your/directory(或者在windows上手动添加一个新的环境变量JULIA_PKGDIR)
- 在 julia 中运行
Pkg.init() 以初始化新的包系统
- 将
REQUIRE从旧目录复制到新目录
- 在朱莉娅中运行
Pkg.resolve()
Julia-v0.7+
新包管理器中的“包目录”名为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 和一个Manifest.toml(如果它有一些依赖项)。这两个文件记录和跟踪项目的环境。
更新
以下信息可能已过时。我强烈建议使用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
如果我们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
此命令将目标包添加为我们当前项目的依赖项。在本例中,我们在HelloWorld 的Manifest.toml 中添加了ImportMacros。如果我们只是将它用作顶级项目呢?要将其添加到默认环境(v0.7)?不,我们不需要。答案是我们可以直接下载代码cd到文件夹中,然后在pkg模式下运行instantiate:
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`
新的包管理器很棒!我们既不需要在using 之前使用“include”,也不需要为using 它打包所有内容。我们现在有了功能齐全的“项目”!