Juliaから仮想環境Pythonを利用する in VSCode
はじめに - Juliaとは
こんにちは。株式会社アイデミーでデータサイエンティストをしております中沢(X/Bsky)です。
皆さんはJuliaというプログラミング言語をご存知でしょうか。Juliaは数値計算やデータ分析を志向した言語であり、Pythonのように簡単に書くことができ、Cのように高速に動作するものを目指した『欲張り』な言語として注目を集めています[1]。しかも、PyCallやPyPlotといったパッケージを通じてPythonのライブラリやツールをJuliaのコード内で直接利用できるため、Pythonの広範なエコシステムを高速なJulia環境で活用することができます[2]。加えて、Jupyterに対応しており、Notebook形式で分析を進めることも可能です[3]。
しかし、Pythonとの連携を考えると悩みのタネとなるのが、Pythonの環境ややこしい問題です。変なものを入れてコアPythonが動かなくなっても困りますし、Juliaで使うPythonパッケージを明示的にまとめて管理できると嬉しいですよね。そこで本稿では、仮想環境内のPythonと連携したJuliaをVSCodeのJupyter Notebook上で動かす環境を作る方法をご紹介します。
手順0: Julia, Python, VSCodeのインストール
それぞれ必要なバージョンをインストールしてください。
手順1: Python仮想環境の構築
みなさんが普段から使っておられる方法でJuliaとの連携用のPython仮想環境を構築してください[4]。例えば、
- venvを使う場合
python -m venv env4julia
- condaを使う場合
conda create --name env4julia python=3.10
などが挙げられます。
手順2: Pythonの使いたいパッケージをインストール
先ほど作成した仮想環境をactivateします。例えば、
- venvの場合は
- (Mac/Linux)
source env4julia/bin/activate
- (Win)
env4julia/Scripts/activate
- (Mac/Linux)
- condaの場合は
conda activate env4julia
などですね。
その後、pip install numpy pandas matplotlib
などを実行し、必要なPythonパッケージをインストールします。
手順3: 仮想環境Pythonのパスを取得
仮想環境がactiveな状態で、ターミナルで python -c "import sys; print(sys.executable)"
を実行し、仮想環境のパスを取得してください。これを手順7で使うので、どこかに記録しておいてください。
ここでは仮に /path/to/env4julia/bin/python
が得られたとしましょう。
手順4: Juliaのプロジェクト作成
Juliaではプロジェクトという形式で、仮想環境のようなものを構築します。以下の手順でプロジェクトを作成します。
- ターミナルで作業ディレクトリに移動
-
julia
と入力し、Juliaを起動[5] - Juliaが起動したら
]
を押してパッケージモード (pkg>
と表示される)に入る -
pkg> activate .
と入力することで現在の作業ディレクトリをプロジェクト名としたプロジェクトが起動される
-
pkg> status
と入力すると、Status [作業ディレクトリ]/Project.toml (empty project)
と表示されることを確認
手順5: Juliaパッケージのインストール
Juliaのパッケージモードに入ったまま、以下のように必要なパッケージをインストールします。
-
pkg> add PyCall
... JuliaからPythonを呼び出すためのパッケージをインストール -
pkg> add IJulia
... JupyterでJuliaを使うためのパッケージをインストール
パッケージをインストールすると、作業ディレクトリにProject.toml
と Manifest.toml
の2ファイルが作成されます。これらがJuliaの環境を定義しています。
パッケージインストール後、pkg> status
と入力すると、インストールされたパッケージ一覧が確認できます。
(↑は本稿で触れていないものも入っていますがご容赦ください)
手順6: Juliaから仮想環境Pythonへのパスを通す
まず、delete
を押してパッケージモードを終了します。
そして、手順4で記録したPythonのパスをJuliaに教えてあげます[6]。
julia> ENV["PYTHON"] = "/path/to/env4julia/bin/python"
そしてPyCallを再ビルドします。]
を押して再度パッケージモードへ入り、pkg> build PyCall
を実行します[7]。
手順7: VSCodeの環境構築
- VSCodeを起動
-
拡張機能をインストール
- 作業ディレクトリを開き、ファイル (.ipynb) を作成
- Jupyter NotebookのカーネルでJuliaが選べるようになっていることを確認
- コードテスト
Python呼び出しテスト
以下のコードを実行することで、指定した仮想環境のPythonが選択されていることを確認します[8]。
using PyCall
println(PyCall.python)
次は実際にJuliaからPythonのパッケージを呼び出してみましょう。今回はnumpyとpandasをインストールしていますので、以下のコードでテストしてみます。
using PyCall
# NumPyとPandasのインポート
np = pyimport("numpy")
pd = pyimport("pandas")
# NumPyの動作確認
arr = np.array([1, 2, 3, 4, 5])
println("NumPy array: ", arr)
# Pandasの動作確認
df = pd.DataFrame(Dict("A" => [1, 2, 3], "B" => [4, 5, 6]))
println("Pandas DataFrame:")
println(df)
# Python関数の呼び出し確認
math = pyimport("math")
result = math.sqrt(16)
println("Square root of 16: ", result)
# Pythonスクリプトの実行確認
pyimport("os")["system"]("python -c 'print(\"Hello from Python!\")'")
出力結果↓
NumPy array: [1, 2, 3, 4, 5]
Pandas DataFrame:
PyObject B A
0 4 1
1 5 2
2 6 3
Square root of 16: 4.0
Hello from Python!
これが出れば成功です!
おわりに
本稿では、JuliaとPythonの仮想環境を連携させ、VSCodeのJupyter Notebook上で動かす環境の構築方法を紹介しました。Juliaは高速性と使いやすさを兼ね備えた言語ですが、Pythonの豊富なパッケージ群を活用することで、さらに幅広い用途に適用できるようになります。
そもそもPythonをJuliaから呼び出す必要があるのか(Julia単体でも色々できる[9]し、本当に必要なときは別々に動かせばいい)という話でもあるのですが、選択肢を持っておいて悪いことはありません[10]。自身の目的に応じて最適なアプローチ選択していただければと思います。
本稿が、みなさまのJuliaとPythonを使ったデータ分析の一助となれば幸いです。
-
Why We Created Julia https://julialang.org/blog/2012/02/why-we-created-julia/ ↩︎
-
RともRCallを使えば連携ができます。 ↩︎
-
Jupyter = Julia + Python + R ↩︎
-
既存の仮想環境と連携させたい場合は手順2,3は飛ばしてください。 ↩︎
-
ここでJuliaが起動しない場合、Juliaのパスが通っていないと考えられます。 ↩︎
-
Win機の場合はバックスラッシュ→スラッシュに置換する必要があるようです。 ↩︎
-
Pythonのライブラリをアップデートした場合も再ビルドが必要になるかもしれません。未検証。 ↩︎
-
手順7から同じターミナルで継続して動かす場合はJuliaの再起動が必要となります。再起動後、プロジェクトのactivate (
pkg> activate .
)を忘れないように注意してください。 ↩︎ -
本稿では例としてnumpyとpandasを呼び出しましたが、Juliaだけでもデータの加工・可視化は十分に行えます。 https://zenn.dev/otwn/articles/14b90c4db5b974 ↩︎
-
例えばRCallとPyCallでRとPythonの間をシームレスに繋ぐのも一つのユースケースかもしれません。 ↩︎
Discussion