web-dev-qa-db-ja.com

Juliaのパッケージディレクトリを変更する

JuliaのPackageディレクトリを変更したい。デフォルトは

"~/.Julia/v0.4"

移動/opt/Julia/v0.4/にしたい。理想的には、~/.Julia/v0.4にすでにインストールされているパッケージを新しい場所に移動したいと思います。しかし、それが不可能な場合は、再インストールできます。

私は何をしなければなりませんか?

19
becko

Julia-v0.6およびそれ以前

次の手順に従って、Juliaのパッケージディレクトリを変更できます。

  1. シェルで_export Julia_PKGDIR=/your/directory_を実行します(またはWindowsで手動で新しい環境変数_Julia_PKGDIR_を追加します)
  2. juliaでPkg.init()を実行して、新しいパッケージシステムを初期化します
  3. 古いディレクトリから新しいディレクトリにREQUIREをコピーします
  4. juliaで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_が含まれます。これら2つのファイルは、プロジェクトの環境を記録して追跡し続けます。

更新

次の情報は廃止されている可能性があります。 Julia-v1.0以降でプロジェクトを生成するには、 PkgTemplates.jl を使用することを強くお勧めします。

新しいプロジェクトを生成する

任意のフォルダーに新しいプロジェクトを生成できますが、プロジェクトを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
_

このコマンドは、現在のプロジェクトの依存関係としてターゲットパッケージを追加します。この例では、ImportMacrosの_Manifest.toml_にHelloWorldを追加しました。それをトップレベルのプロジェクトとして使用するとどうなるでしょうか。デフォルト環境に追加するには_(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`
_

新しいパッケージマネージャーは素晴らしいです! "include before using"も必要ありませんし、usingのためだけにすべてをパッケージにすることもできません。本格的な「プロジェクト」が完成しました!

38
Gnimuc

ジュリアのみの方法:

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

ただし、キャッシュディレクトリはまだ古いフォルダーを指しているため、その理由を確認し、それを把握しました。

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")
4
lama12345