Python を触っていない Lisper のための Hy 環境構築


この記事は、Lisp Advent Calendar 2019 の 15 日目の記事です。

この記事の要旨

Hy は Python の Virtual Machine 上で動作する Clojure ライクな Lisp 方言です。
Python を触ったことがない Lisper (主にClojurian) 向けに、Hy の環境構築方法に絞って説明していきます。

対象読者

  • Python を触ったことがない Lisper (主にClojurian)

Hy 自体の入門ドキュメントとしては、公式チュートリアルか先人の記したものを参照していただければと思います。

環境構築

Python をインストールする

Windows 10 の場合

python.org からインストーラをダウンロードしてインストールするのが簡単です。
いきなり罠なのですが、python.org のトップページからダウンロードできる最新版インストーラは 32bit 版です(2019/12時点)。
32bit 環境でない限りはインストールしないように気を付けましょう。

MacOS の場合

Homebrew をインストールし、brew コマンドでインストールするのが一般的なようです。

$ brew info python でインストール可能なバージョンを確認すると、3.7.5 でした (2019/12/13 時点)。

Homebrew でインストールされる Python 3 (3.7.5) の場所

/usr/local/bin/python3

site-packages の場所

/usr/local/lib/python3.7/site-packages

仮想環境の構築

Python 本体の site-packages にサードパーティー製モジュールをインストールしても動作はするのですが、
プロジェクトごとに仮想環境を使い分けると元環境を汚さずに済み、他プロジェクトへの影響を回避できます。
デフォルトで付属している venv コマンドを使って仮想環境を作る場合、作成したいディレクトリ下で、下記のように実行すると作成されます。

$ python -m venv <venv名>

もし、仮想環境を使っているうちに後述するサードパーティー製モジュールの依存関係がめちゃくちゃになってしまったら、そのまま捨てて新しく作り直すだけです。

仮想環境の有効・無効を切り替えるには、activatedeactivate コマンドを使います。
venv 内にある activate の場所は Shell や OS によって違うため、venv --- 仮想環境の作成 内の「仮想環境を有効化するためのコマンド」を参照ください。

モジュールのインストール

Python をインストールした段階で、標準ライブラリ が一緒にインストールされており、それらを Hy から使うことができます。Python はバッテリー内蔵言語のため、標準ライブラリだけでも割といろいろなことができます。

標準ライブラリ以外のサードパーティー製モジュールを使用したい場合は、パッケージ管理ツールの pip を使って仮想環境にインストールします。
基本的に、Python のモジュールは(ほとんど)すべて Hy で動作します。
もちろん、Hy で書かれたモジュールも同じバージョンであれば動作します(ほとんど見当たりませんが…)。
Python のサードパーティー製モジュールは PyPI で探すとよいでしょう。
たまに、PyPI に登録されていない Python モジュールがありますが、それらのインストール方法も後述します(GitHub リポジトリで管理されているものに関して)。

科学計算用ライブラリ Anaconda をインストールし、conda でモジュール管理をするという手もあります。
pip と併用すると環境が壊れることがあるため、この記事ではインストールしないものとします。

仮想環境を activate し、pip install <モジュール名>でモジュールをインストールします。
一括でインストールしたい場合は、モジュール名を改行で区切った requirements.txt を書き、pip install -r requirements.txt を実行します。慣例として requirements.txt という名前にしていますが、別の名前でも構いません。

requirements.txt
hy
openpyxl
PySide2

特定のバージョンを指定することもできます。

requirements.txt
hy==0.17.0
openpyxl==3.0.2
PySide2==5.13.2

モジュールが GitHub リポジトリにしかない場合は、

pip install git+https://github.com/hoge/fuga.git

のようにします。
これを requirements.txt に含めることもできます。

その環境にインストールしたサードパーティー製モジュールの一覧を確認したい場合は、pip freeze を実行します。
pip freeze > requirements.txt のように書き出しておけば、環境が壊れてしまった場合も復帰が楽になります。

エディタ・IDE

Hy のプラグインがあるエディタ・IDE はまだほとんどありません。私が知る限りでは、下記の三つのみです。

パッケージの作り方

自作のアプリケーションやライブラリを階層化したいときは、パッケージを作成すると管理しやすいです。

hy ─┬─ hoge ─┬─ fuga ─┬─ __init__.hy
    .        │        .
    └─ piyo  │        └─ bar.hy
             │
             ├─ __init__.hy
             .
             └─ foo.hy

上図で環境変数 PYTHONPATHhy ディレクトリを追記した場合、
hoge 以下のディレクトリにそれぞれ __init__.hy を置くことで

example_import.hy
(import hoge)  ;; hogeの__init__.hy がインポートされる
(import hoge.foo)
(import hoge.fuga)  ;; hoge/fugaの__init__.hy がインポートされる
(import hoge.fuga.bar)

のように書くことができます。このパッケージの構造は Python と同様です。

Python チュートリアル > 6. モジュール > 6.4. パッケージ

まとめ

  • Hy の環境構築は Python のそれとほとんど同じです。
  • 仮想環境を作ると大元の環境が汚されずに済みます。仮想環境が壊れても、捨てて作り直すだけです。
  • Hy は、Python の標準ライブラリがデフォルトで使用できます。
  • 標準ライブラリになければサードパーティー製モジュールを PyPI などで探して pip でインストールします。
  • requirements.txt を pip freeze で書き出しておくと保険になります。

それでは、良い Hy ライフを。