MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Juliaにおけるパッケージ管理&新しいパッケージ作成メモ


1から始める Juliaプログラミング

目次

はじめに

すぐ忘れるのでメモしておきます。

パッケージ管理

インストールされているパッケージを表示する

using Pkg;Pkg.installed()

指定したパッケージをインストールする

using Pkg;Pkg.add("JuMP")

指定したバージョンのパッケージをインストールする

using Pkg; Pkg.add(PackageSpec(name="JuMP", version="0.18"))

すべてのパッケージをアップデートする

using Pkg; Pkg.update()

指定したパッケージを削除する

using Pkg; Pkg.rm("JuMP")

パッケージのバージョンを固定する

パッケージのバージョンを固定するには、

pinコマンドを使います。

$ pkg> pin JuMP

このようにバージョンを固定すると

updateコマンドでバージョンが更新されなくなります。

解除したい場合はfreeコマンドを使います。

パッケージリポジトリの最新のバージョン情報を取得する

こちらを参照

discourse.julialang.org

新しいパッケージを作成する時

Juliaの新しいパッケージを作成して、GitHub上で公開する時の注意点です。

初期パッケージを生成する(デフォルトのPkgモジュールを使う)

デフォルトのPkgモジュールを使って、

$ julia -e 'using Pkg; Pkg.generate("hogePkg")

とすると、必要最小限のパッケージディレクトリ

(srcディレクトリとProject.tomlが入っている)を作ってくれます。

 

PkgTemplatesを使う

前述のデフォルトのPkgモジュールで生成されたパッケージは、

かなりシンプルですが、実際にOSSとして公開するとなると、

上記以外に、

  • ユニットテストコード

  • CI用の設定

  • 自動オンラインドキュメント作成

など様々なツールが必要になります。

 

それらをまとめてやってくれるのが、

PkgTemplatesというツールです。

github.com

 

juliaのパッケージのtop directoryは

  • src: .jlソースファイル用ディレクトリ

  • doc: ドキュメント用ディレクトリ

  • test: ユニットテスト用ディレクトリ

  • Project.toml, Manifest.toml: 依存関係用ファイル

で構成されますが、それらを自動生成してくれます。

ちなみに、Manifest.tomlはPkg.jlが自動生成するファイルで

手動で変更することはありません

julialang.github.io

 

docディレクトリのオンラインドキュメントは、

Documenter.jlを使います。

github.com

 

具体的なパッケージのセットアップ方法

  1. GitHub上にMyPackcage.jlのようにリポジトリを作る

  2. PackageTemplateでディレクトリパッケージのテンプレートを作る

julia> using PkgTemplates 
julia > t = Template(;
                  dir="./MyPackage",
                  julia=v"1.4",
                  plugins=[
                      License(; name="MIT"),
                      Git(;ssh=true),
                      GitHubActions(),
                      Documenter{GitHubActions}(),
                  ],
     )
 julia > t("MyPackage")
  1. Documenterツールでドキュメント作成用のsshキーを生成する
pkg> add DocumenterTools
julia> using DocumenterTools
julia> DocumenterTools.genkeys(user="AtsushiSakai", 
          repo="git@github.com:AtsushiSakai/MyPackage.jl.git")

ここで表示された

短いキーを Settings -> Deploy keys に documenter という名前で追加

(登録するときに、Write権限のチェックをちゃんと入れること)

長いキーをSettings -> Secrets -> にDOCUMENTER_KEYという名前で追加

すると、コミット毎に自動的に、GitHub Actionsでドキュメントが生成されます。

 

詳細は下記の記事が非常に参考になります。

qiita.com

qiita.com

qiita.com

 

既存のパッケージにPRを作成する

前述の方法で、自作のパッケージを作ることができますが、

いつも使っている、他人が作ったパッケージを改善し、

PRを投げたいと思った場合の方法について説明します。

 

基本的には、下記のページの解答通りなのですが、

discourse.julialang.org

下記の2つの方法でPRを作成できます。

方法1

Example.jlというパッケージにPRを投げたいとします。

  • 1 GitHub上でExample.jlをforkする

  • 2 REPLのpkgモードで、

pkg> develop Example

として、Exampleを~/.julia/dev下にクローンして、利用するようにする

  • 3 ~/.julia/dev/Exampleのコードを修正し、コミットする

  • 4 gitでremoteとして自分のforkを追加する

例)

$ git remote add myfork https://github.com/myname/Example.jl

  • 5 Pushする

$ git push myfork

方法2

Example.jlというパッケージにPRを投げたいとします。

  • 1 GitHub上でExample.jlをforkして、cloneしておく。

  • 2 REPLのpkgモードで、

pkg> develop /path/to/Example

として、Exampleを使えるようにしておく。

  • 3 クローン済みのExampleのコードを修正し、コミット& pushする

  

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com


1から始める Juliaプログラミング

 

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com