Morikatron Engineer Blog

モリカトロン開発者ブログ

juliaをコンパイルして実行可能ファイルを作る

こんにちは、モリカトロン株式会社・AIエンジニアの舒(ジョ)と申します。

最近研究では経路探索のアルゴリズムの速度を最適化する必要があります。 pythonは本当に遅いので、pythonのようなプログラミング言語を見つけました。

ということで今回は最近使い始めた「Julia」を紹介します。

juliaとは

Julia」とは、高度な計算や数値解析のできるスクリプト言語です。

マサチューセッツ工科大学の研究者Jeff Bezansonらによって2009年に開発され、2012年にオープンソース化されました。

開発者は、Juliaについて、ほかの言語のいいところだけを組み合わせることを目指した言語だと述べています。

例えば、C言語の速さやR言語の統計の扱いやすさ、Perlの自然な文字列処理、Matlabの線形代数などについて言及しています。そして、完成したJuliaはPythonの汎用性を保ちながら、便利さや速さを従来の言語と比較して大幅に改善し、使いやすい言語になりました。

ja.wikipedia.org

juliaインストール

下記の公式サイトにアクセスしてJuliaのインストーラーをダウンロードできます。 自分使っているのはVersion 1.6.5です。

julialang.org

インストール後、インストールしたフォルダのパスなどを環境変数に設定して下さい。 (例)

 JULIA_PATH="C:(Juliaインストールフォルダ)"
 PATH=%JULIA_PATH%\bin;%PATH%

Juliaのショートカットを実行します。

以下のようにJuliaのプロンプト画面が起動しますので、ここにコマンドを入力して処理を実行させます。

VS Code上で開発環境を整える

Julia拡張を導入する

  1. VS CodeでJuliaを扱うための拡張機能をインストールします。
  2. VS Code内、左のバーから拡張機能をクリックし、「Julia」で検索を行うと、画像のような拡張機能が見つかるので、こちらをインストール。
  3. 設定ページ内にExexutable Pathという項目があるので、こちらに先ほどインストールしたJuliaのpathを設定します。

  1. VS Code上でTest.jlを開いた状態でShift+Enterを押すことで、VS Code上でREPLというJuliaのコマンドラインが現れ、実行結果が表示されます。

パッケージ導入

  1. Juliaのショートカットを実行します。
  2. 「using Pkg」を入力して、Pkgツールの呼び出します。
  3. 「kg.add("package")」で指定パッケージをインストールします。

パラメータ 詳細
Pkg.add( package ) 指定された登録パッケージをダウンロードしてインストールします。
Pkg.checkout( package branch ) 指定された登録済みパッケージのブランチを調べてください。 branchはオプションで、デフォルトは"master"です。
Pkg.clone( url ) 指定されたURLのGitリポジトリをパッケージとしてパッケージ化します。
Pkg.dir( package ) 指定されたパッケージのディスク上の場所を取得します。
Pkg.pin( package version ) 指定したバージョンにパッケージを残します。 versionはオプションで、デフォルトはパッケージの現在のバージョンです。
Pkg.rm( package ) 指定されたパッケージを必要なパッケージのリストから削除します。

pythonと連携: pyjulia

Pythonでは数値計算が遅い状態になっていますが、Juliaで早くなりそうな気がするので Julia 使ってみたいです。 とはいえ Python 資産がそれなりにあり完全に移行できるわけではないので、計算の一部だけ julia で処理します。

github.com

事前処理

  1. pip install julia で PyJulia をインストール
pip install julia 
  1. python 上で下記コマンドを実行
import julia
julia.install()

pythonからjuliaを呼び出す

以下のjuliaファイルがある場合、「Test.jl」として保存します。

function test_function(text)
   println(text)
end

新しいpythonフォルダを作成し、次のコーを実行します。

from julia import Main as jl
jl.include("Test.jl")
jl.test_function("hello world!")
jl.close
julia> "hello world!"

デメリット

  • pythonスレッドに相性が悪い バックグラウンドタスクはPyJuliaを使用します。これはでスレッドセーフなではなく、同じプロセスで2つの異なるスレッドから呼び出された場合に失敗します。

github.com

  • pyinstallerでビルドすることができない juliaファイルだけをコンパイルしてpythonから呼び出すことで、ビルドしたpythonと連携することが可能です。

stackoverflow.com

juliaをコンパイルする

ソースコードをGUIアプリにして渡さないとダメな場合があります。そんな時に便利なGUIアプリの配布方法として、CImGui.jlで作ったアプリケーションをPackageCompiler.jlで配布する方法を紹介します。

github.com

あるjuliaコードをビルドしたい

以下のjuliaファイルがある場合、「Test.jl」として保存します。

function test_function(text)
   println(text)
end
test_function("hellow world!")

PackageCompilerインストール

  1. Juliaのショートカットを実行します。
  2. 「using Pkg」を入力して、Pkgツールの呼び出します。
  3. 「kg.add("PackageCompiler")」でPackageCompilerをインストールします。

    juliaをコンパイルする

  4. Juliaのショートカットを実行して、pwd()関数を使用して、作業ディレクトリを確認できます。

julia> cd("path") # 作業ディレクトリを変更できます
  1. パッケージ化されたファイルのサイズを減らすには、独立した環境を作成します。

↑命令を実行して、作業ディレクトリに「Hello」フォルダを生成します。

  1. キーボードから「]」を押して、PKGツールに入ります。
  2. 「Hello」環境に切り替えます。
  3. PKGの状態で、必要な外部パッケージを「Hello」環境に追加します。

  1. 「"作業ディレクトリ\Hello\"」下の「Project.toml」で、コンパイル情報が編集できます。

  1. 「"作業ディレクトリ\Hello\src\"」下の「Hello.jl」に、Test.jlの内容をコッピして、ビルド用ファイルをつくります。 ここでは元のすべてのコードを1つの関数の内部に置く必要があります。

  1. Juliaのショートカットを実行して、下のコードを入力して、ビルド完了まで待ちます。
create_app("pkg_ob_name", "path_name")

  1. 「"作業ディレクトリ\Hello_build\src\bin\Hello.exe"」を実行します。

参考

https://qiita.com/syoyo/items/5b8639b206b232984ffa https://github.com/JuliaPy/pyjulia https://qiita.com/ttabata/items/b05bb43d06239f968035 https://qiita.com/ttabata/items/3afc8cef40d1e98a7b17 https://qiita.com/SatoshiTerasaki/items/9d775c294a10c1f2edfe https://www.youtube.com/watch?v=jjJ2xHpxwHg https://www.kimoton.com/entry/20210414/1618372800

Dear PyGui チートシート(Ver.1.1.3 対応版)

どうも、モリカトロン株式会社でエンジニアおじさんを営んでいる岡島です。

以前「PythonのGUIフレームワーク「Dear PyGui」の紹介」という記事で Dear PyGui という Python の GUI フレームワークを紹介してから社内でも使用する人が増えてきました。
そんな Dear PyGui を使い始めた他のエンジニアに使用感を聞いてみたところ「情報が少なくて最初大変でした。 チートシートみたいなものがあるとよかった んですが…」という声が! 自分が触り始めた時には Example が充実していてそんなことなかったのに何故?と思って調べてみると、最近はドキュメントが刷新され、以前にあった Example に相当する資料がなくなっているようです。

既に使い方が分かっている自分は困らないのですが、確かに新しく使おうと思った人にとっては気軽に機能を確認できるようなサンプルコードやインターネット上の情報は重要! ちょっと調べて情報が出てこないようなライブラリは流行らない!

ということで、今回は社内向けの資料を兼ねて Dear PyGui の チートシートみたいなもの を用意してみました。

  • Install
  • Github
  • Document
  • Example
    • Window
    • Input Text
    • Tooltips & Popup
    • Image
    • Plot
    • File Dialog
    • File Dialog (tkinterを利用する場合)
    • Font
    • Widget
続きを読む

GeneralTalker APIを使ったLINE botの作り方

モリカトロンの宮本です。

弊社では、AIとの雑談を実現する GeneralTalker API を公開しています。
雑談を必要とする様々なシステムに組み込んで延々と無駄話を繰り広げていただくことが可能です。

前回はこのAPIを使った Twitterボットの作り方をご紹介しましたが、今回はLINEボットの作り方をご紹介します!

続きを読む

GeneralTalker APIを使ったSlack botの作り方

こんにちは、モリカトロンの山田です。

弊社では、AIとの雑談を実現するGeneralTalker APIを公開しています。
雑談を必要とする様々なシステムに組み込んで延々と無駄話を繰り広げていただくことが可能です。

今回はこのAPIを使ったSlack botの作り方をご紹介します。

続きを読む

GeneralTalker APIを使ったTwitter botの作り方

モリカトロンの宮本です。

弊社では、AIとの雑談を実現する GeneralTalker API を公開しています。
雑談を必要とする様々なシステムに組み込んで延々と無駄話を繰り広げていただくことが可能です。

今回はこのAPIを使ったTwitterボットの作り方をご紹介します。

続きを読む

PythonのGUIフレームワーク「Dear PyGui」の紹介

(2021/2/01/06追記) この記事を書いた当時から Dear PyGui のバージョンが上がり、記事内のコードは最新の Dear PyGui では動かなくなりました。
Ver1.0.0 以降の Dear PyGui 向けに新しい記事を書きましたので、そちらもご参照ください。

Dear PyGui チートシート(Ver.1.1.3 対応版)

どうも、モリカトロン株式会社でエンジニアおじさんを営んでいる岡島です。

お仕事でプログラムを書いていると、ときどきGUIアプリケーションを作る必要が出てきてきます。 そういう場合今まではPythonのQtバインディングであるPyQtPySide(Qt for Python)を使っていたのですが、これらには

  • pip installとは別にQtのインストールが必要(インストールには割と時間がかかる)
  • 高機能で色々なことが出来る反面、覚えないといけないことが多い(すぐに忘れるので都度調べることになる)

という不満がありました。ちょっとしたGUIアプリケーションを作るなら、シンプルで簡単に使えるフレームワークが良い…
(Pythonに標準搭載されているtkinterもちょっと苦手です)

ということで今回は最近使い始めたGUIフレームワーク「Dear PyGui」を紹介します。

続きを読む