更改Julia中的包目录

更改Julia中的包目录,julia,Julia,我想更改Julia中的包目录。默认值是 "~/.julia/v0.4" 我想把它移到/opt/julia/v0.4/。理想情况下,我希望将已安装在~/.julia/v0.4中的软件包移动到新位置。但如果这是不可能的,我可以重新安装它们 我必须做什么?Julia-v0.6及之前 可以通过以下步骤更改julia的包目录: 在shell中运行export JULIA_PKGDIR=/your/directory(或在windows上手动添加新的环境变量JULIA_PKGDIR) 在julia中运行P

我想更改Julia中的包目录。默认值是

"~/.julia/v0.4"
我想把它移到
/opt/julia/v0.4/
。理想情况下,我希望将已安装在
~/.julia/v0.4
中的软件包移动到新位置。但如果这是不可能的,我可以重新安装它们

我必须做什么?

Julia-v0.6及之前 可以通过以下步骤更改julia的包目录:

  • 在shell中运行
    export JULIA_PKGDIR=/your/directory
    (或在windows上手动添加新的环境变量
    JULIA_PKGDIR
  • 在julia中运行
    Pkg.init()
    ,以初始化新的包系统
  • REQUIRE
    从旧目录复制到新目录
  • 在julia中运行
    Pkg.resolve()
  • Julia-v0.7+ 调用新软件包管理器中的“软件包目录”,可以通过添加环境变量来更改它

    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
    (如果它有一些依赖项)。这两个文件记录并跟踪项目的环境

    更新 以下信息可能已过时。我强烈建议使用Julia-v1.0+生成项目

    生成新项目 我们可以在任何文件夹中生成一个新项目,但是我们必须
    cd
    到项目文件夹中才能
    使用该项目。下面的
    (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
    到项目文件夹并
    激活
    环境,那么我们可以
    使用
    我们的新项目而不会出现任何问题:

    shell> cd MyNewProject/
    /Users/gnimuc/MyNewProject
    
    (v0.7) pkg> activate .
    
    (MyNewProject) pkg> 
    
    julia> using MyNewProject
    
    我认为这就是新的包管理器和旧的包管理器之间的巨大区别。简而言之,我们需要显式地激活未注册的项目/包

    下载并初始化其他人的项目 根据文档,我们可以通过
    add
    命令添加未注册的包/项目:

    (HelloWorld) pkg> add https://github.com/fredrikekre/ImportMacros.jl
    
    此命令将目标包添加为当前项目的依赖项。在本例中,我们在
    HelloWorld
    Manifest.toml
    中添加了
    importmacro
    。如果我们只是把它作为一个顶级项目来使用呢?要将其添加到默认环境
    (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`
    
    新的软件包管理器很棒!我们既不需要在使用
    之前包含,也不需要将所有内容都打包,只用于使用它。我们现在有全功能的“项目”

    Julia唯一的方法:

    julia> ENV["JULIA_PKGDIR"] = "E:\\Julia-0.6.0\\portable"
    "E:\\Julia-0.6.0\\portable"
    
    julia> ENV["JULIA_PKGDIR"]
    "E:\\Julia-0.6.0\\portable"
    
    julia> Pkg.init()
    INFO: Initializing package repository E:\Julia-0.6.0\portable\v0.6
    INFO: Cloning METADATA from https://github.com/JuliaLang/METADATA.jl
    
    但是,cache dir仍然指向旧文件夹,因此我检查了原因并找出了原因:

    julia> Base.LOAD_CACHE_PATH
    1-element Array{String,1}:
     "C:\\Users\\kung\\.julia\\lib\\v0.6"
    
    julia> Pkg.__init__()
    2-element Array{String,1}:
     "E:\\Julia-0.6.0\\portable\\lib\\v0.6"
     "C:\\Users\\kung\\.julia\\lib\\v0.6"
    
    julia> pop!(Base.LOAD_CACHE_PATH)
    "C:\\Users\\kung\\.julia\\lib\\v0.6"
    
    julia> Base.LOAD_CACHE_PATH
    1-element Array{String,1}:
     "E:\\Julia-0.6.0\\portable\\lib\\v0.6"
    
    作为简单的功能:

    function set_julia_dir(dir::String)
        ENV["JULIA_PKGDIR"] = dir
        Pkg.init()
        Pkg.__init__()
        pop!(Base.LOAD_CACHE_PATH)
    end
    
    set_julia_dir("E:\\Julia-0.6.0\\portable")
    

    您可以在shell中运行
    export JULIA_PKGDIR=/opt/JULIA/v0.4
    ,然后使用
    Pkg.init()
    在新目录中初始化新的包系统,只需将这些包复制并粘贴到新位置。我应该设置JULIA_PKGDIR=/opt/JULIA,因为版本会自动追加。你应该把答案贴出来。我这样做了,但它打破了Jupyter笔记本。如何通知Jupyter新位置?Jupyter kernelspec列表的结果是什么?@GnimucK。没有关系。我通过在Julia中运行
    Pkg.build(“IJulia”)
    修复了它。如果您有IJulia,请在之后运行
    Pkg.build(“IJulia”)
    。如果我重新启动Julia,是否会保留此设置?环境变量只是临时的,因此如果您不想在shell启动脚本中设置Julia\PKGDIR,每次都需要调用
    set\u Julia\u dir
    ,唯一的方法是编辑Base,默认情况下,它硬编码到
    Base/pkg/dir.jl
    中的
    joinpath(homedir(),“.julia”)
    ,然后重建julia的系统映像