Pythonマイナー環境列伝 ～あなたはいくつのPython環境を知っているか？～

#Pythonマイナー環境ってなんだ？

会社内でPythonの話をしてた時，「Pythonの環境っていっぱいありますよねぇ～」みたいな話をして，軽く「そういやそうですねぇ～」みたいなことを言ってたんですが，意外にこの「マイナー環境」というものについて，まとめたページも少ないので，知っている限りのPythonの実行環境について，ちょっとまとめてみました．ここで，何個か注意点があります．

- Pythonとして完全でないことも許容する
- Pythonのトランスパイラも含む
- Python実行環境を含む

という割と緩めな縛りでお話しします．こういうマイナーなPython環境というのは正確なPythonであっても動かないことが多いです．もしくは，Pythonが別言語に変換されてたりして，「Pythonとは何なのだろう・・・」と思うこともあると思います．また「なんかPythonが動いている気がする」程度のものも取り扱っています．が，それもPythonのすそ野の広さ（宇宙CQCみたいなモノ）だと思って，見ていただけると幸いです．

#CPython

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/e4bfdba7-7a30-fcbf-fc06-1503c564b77c.png)

https://www.python.org/
Qiitaの記事数：11075

全然マイナー環境じゃないし，完全に本家本元なので，説明不要だと思うのですが，一応最初に紹介するものは公式．ということでご容赦ください．
とりあえず「Python」と呼ばれるものは，普通このCPythonというものを指します．非常に一般的で，普通にPythonをインストールするとこれが入ると思って間違いないです．


#Jython

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/e692e09f-7167-02b2-f6c4-70d6ff2338e6.png)

http://www.jython.org/
Qiitaの記事数：56

はい．Javaで書かれたPythonです．JVM上で動きます．これはPythonのインタプリタがJavaで組まれているので，`jython filename.py`みたいな形で動かすことが出来ます．
結構キワモノ感もあるんですが，やってみると意外に楽しかったりします．というのは基本的なJavaのライブラリも使えますし，SwingやAWTなどのGUIライブラリも使えるので，Pythonの対話環境のインタプリタ上で，ボタンの配置を動的にできたり．となかなか．変態な挙動をさせることが出来るものです．
意外にも開発は進んでいるらしく，Python2.7対応してたりします．


#IronPython

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/00d86f81-781e-88cc-fd99-1efbf5a238df.png)

http://ironpython.net/
Qiitaの記事数:31

WindowsやMonoの環境，.NetFramework上で動くPythonです．C#で実装されているそうです．私も昔触ろうとしたことがあって，Visual StudioでIronPythonが使えるようになる！みたいな話があったんですが，それは有料のVisual Studioでしかできなかったので，結局触ることなくいるPython実行環境だったりします．
結構前からあって，Monoという.NetFrameworkの互換品が出たあたりぐらいからあったので，割と古参な処理系だったと思います．



#Unladen Swallow

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/3366cb8c-2cf4-e485-0a00-eab9236a2a87.png)

https://code.google.com/archive/p/unladen-swallow/
Qiitaの記事数:5

個人的には「あんらーでんすわろー」と読んでまし**た**．2010年頃に「Python速くしようぜ！」みたいな話があり，その時に出てきたPythonの実装系でした．今見てみると先進的でバックエンドにLLVMを使い，JITコンパイルをするというアグレッシブな試みでした．本家のPythonに取り込まれることなく，開発がストップしてしまいました・・・あまり経緯は知らなかったのですが，おもしろい読み物があったのでご紹介．

[Unladen Swallow 回顧録](http://ymotongpoo.hatenablog.com/entry/20110327/1301214248)


#Stackless Python(Stackless)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/23acd560-6dc1-7e17-ddf8-74be8b9f80fa.png)

https://bitbucket.org/stackless-dev/stackless/wiki/Home
Qiitaの記事数:2

これは僕自身はほとんど使ったことない(後述)なのですが，割といろいろなところで見るPython実装です．特徴としてはスタックがC言語のコールスタックに依存していないことだそうですが，あまり恩恵は受けたことがないです．
bitbucketでサービスをしているとは珍しいですね．しかも開発も今でも進んでいるようです．


#Portable Python

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/add629b6-2903-61c2-d3af-f8cfc3e33032.png)

http://portablepython.com/
Qiitaの記事数：1

時代が生んだあだばなといいますか，個人的には重宝したPythonでした．
何が便利かといいますと，USBメモリにディレクトリを一個置くだけで動くPythonで，ネット環境も不要でした．普通Pythonは環境変数の設定や，ホストPCへのインストールが必須だったりしましたが，これは開発環境がそのまま持ち運べるので，どこでもPythonが書けて良かったです．
と言っても，今となってはideone等のWebで簡単なPythonを書ける環境があるので，必要としなくなりました．そのためか，Portable Python自体もクローズ？のようです・・・確かこのバックエンドがStackless Pythonだった気がします．

ダウンロードページを見ると分かりますが，

http://portablepython.com/wiki/PortablePython2.7.6.1/

1つダウンロードするだけでかなり使えるライブラリがモリモリ入っていたのも便利でした．


#pypy

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/018cad49-2fa8-3e70-b466-16117d0d80ac.png)

http://pypy.org/
Qiitaの記事数:82

pythonで作られたpythonの実行環境．昔，psycoというpython用のjitライブラリがあったのですが，それの後継です．昔は速さを極めるためにpsycoやpypyの導入もやっていましたが，当時はctypesが使えなかったためにやめました．今となっては速度も求めませんし，Cによるネイティブ拡張された機械学習系のライブラリを使うこともあるので，あまり導入メリットがなくて，今でも使わないですね・・・・


#PyMite(python-on-a-chip)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/d3a96bf8-a49f-0d33-4134-e70a085ff027.png)

https://github.com/dwhall/p14p
Qiitaの記事数:**0**

噂で聞いたことがある程度のPython実装系で，「AVR上で動くPythonがある」という都市伝説めいた話だったので調べました．実際に動くようなのですが，結構古いようですね・・・僕自身は動かしたことはなく，AVRも生で触るより，もうArduinoでいいかな・・・と思うので，今後触ることはないと思います・・・


#tinypy

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/78f44cd5-4842-ea43-339f-8b33b31b9096.png)

https://github.com/philhassey/tinypy/tree/master
Qiitaの記事数:**0**

これは知りませんでした．wikipediaのpython実装一覧を見て，初めて知りました．wikipediaの説明で，組み込み用と書いてあるのですが，間違いのようです．ざっくりというとpy2exeとバイナリサイズの最小化機能がついている処理系のようで，例では，pygameを使ったものが提示されており，pygameで作ったゲームが64k以下のバイナリになるようにビルドされるようです．
マイナーですが，僕はtcc(tiny c compiler)を思い出すんですよね・・・


#Brython

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/70048e07-4171-0801-dbb2-480b5d5d42de.png)

http://www.brython.info/
Qiitaの記事数：7

とちくるってる系Pythonの代表格と個人的に思っているJavascriptによるPython実装．ブラウザで動くPython．へーそーなんだーと思うんですが，以下の公式のコードを見てもらうと，頭の悪さが分かる．

```html

<html>
<head>
<script src="/brython.js"></script>
</head>
<body onload="brython()">
<script type="text/python">
from browser import document, alert

def echo(ev):
    alert(document["zone"].value)

document['mybutton'].bind('click',echo)
</script>
<input id="zone"><button id="mybutton">click !</button>
</body>
</html>
```

**トランスレーターじゃないんです．本当にPythonがブラウザで動くし，実際に生で書けるんです．**
しかも思ったより動くあたり腹が立つんですね．その代わり動きがもっさりしてます．当たり前ですが動作が遅いんですよね．


#Grumpy
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/e264e684-6992-e658-6ace-1b7b262f38d6.png)

https://github.com/google/grumpy
Qiitaの記事数：9

Googleが作ってるのにマイナーといっても過言ではないPythonのトランスパイラ．PythonからGoへコードが変換されて，しかもビルドできる！という代物．実はPythonからGoのライブラリも使えるという結構色物．以前にGoとPythonとGrumpyで速度のベンチマークを取ったので，そちらの記事もどうぞ．

[GoとPythonとGrumpyの速度ベンチマーク ～Googleのトランスパイラはどれくらい速い？～](http://qiita.com/kotauchisunsun/items/db28d14f7f13fb29e5f9)

#Pythonista
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/7b4d987a-b83a-687c-fe60-acc89aa2b9d8.png)

http://omz-software.com/pythonista/
Qiitaの記事数:113

iOS上で動くPython実行環境．私は最近知ったのですが，iPhoneアプリでPythonが書けるのはもちろんのこと，スクリプトをスタンドアローンなアプリとして出力できるようです．有料ですが$9.99なので高くないです．ちょっと触ってみたい一品．


#Scripting Layer for Android (SL4A)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/3c3d2b7a-df02-de64-bcf1-43f6b14733d5.png)

https://github.com/damonkohler/sl4a
Qiitaの記事数：3

Android上のPython環境．今開発は止まっているらしい．昔，Javaが書くのが嫌で嫌で，Pythonでアプリを書きたいんだ俺は！と思って調べたやつ．
昔，iPhoneの充電器のコイル鳴りがひどく，スマホが喘いでいるように見える．みたいな動画があって，俺のスマホも喘がしたい！と思って，アプリを作りました．

[【俺のAndroidも】充電するとスマホが喘ぐアプリを作ってみた【喘いだ】](http://www.nicovideo.jp/watch/sm21823315)

このアプリはSL4AでPythonで組んでました．
SL4AはネイティブのUI触るのは厳しく，WebViewしか触れませんが，加速度センサーとかの値は割と簡単に取れたので，これでやりました．



#kivy
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/198091f9-e249-e6a7-a6b1-aadbe45be125.png)

https://kivy.org/#home
Qiitaの記事数：92

ちょっと毛色が違いますが，Pythonを使ったライブラリということでKivyの紹介．その昔，Windows8環境下でマルチタッチのキーボードのようなものを作ろうと思ったことがありました．

[Multitouch Music Board on Windows 8](http://www.nicovideo.jp/watch/sm21613890	
)

その当時，マルチタッチがとれるPythonライブラリが少なく，Kivyぐらいしか選択肢がありませんでした．そこで，KivyとMIDIのライブラリ．それとソフトウェアシンセで作ったのが上の動画．ここで，環境として取り上げているのはなぜかというと，１つのコードで，Linux,Windows,Mac,RasPi,Android,iOSと出力できるなかなかパワフルな環境だからです．(出力されたアプリにビルドインされるという意味で環境と呼んでます．)


#Ren'Py

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/af0b9e7e-48f5-72ad-bbcc-dba5a71717ae.png)

https://www.renpy.org/
Qiitaの記事数:2

これはPythonで書くことが出来るビジュアルノベルエンジンです．ほとんどPythonと同じコードが書けるんですが，ビジュアルノベルに最適化された拡張構文が追加されたなかなか面白い実装になっています．これも似たような感じで，Linux,Windows,Mac,Android,iOS,ChromeOSに出力できるようです．

その昔，

[チーズ蒸しパンになりたいっ！](https://www.dropbox.com/preview/Public/cheese_steam_bread/data/cheesesteambread-0.9-release.apk)

というAndroid向けの糞サウンドノベルを作ったことがあり，そこで使いました．本当にサウンドノベルです．だって絵がないんだもの（描けなかった）．



#Shed Skin
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/81510d1f-6013-a48e-f3f3-d9297c592bb1.png)

https://shedskin.github.io/
Qiitaの記事数:**0**

かなりドマイナーな部類ですね．PythonをC++へ変換するというトランスパイラ．大分昔に使ったことがあったのですが，全然トランスパイルできずに投げた記憶があります．もう保守されてないだろう．と思ってたのですが，まだ保守されてるようです．スゲー


#StacklessPSP

![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/8fad1de2-0a72-1c92-f731-24b501ba7845.png)

https://code.google.com/archive/p/pspstacklesspython/downloads
Qiitaの記事数:**0**

個人的に思い入れのあるPython実装系．PSP(Playstaton Portable)上で動くPythonバイナリです．これは当時PSPを改造してた身としては非常に心高まる実装でした．しかし，実際のところそんなに使いませんでした．使うのがめっちゃめんどくさいんですよね．ちょっと動かしたいだけなのに，

1. PSPをUSBでPCとつなぐ
2. ソースを置く
3. PSPとPCとの切断を切る
4. StacklessPSPの起動

とかやってたんですけど，これが時間がかかるので途中で投げ出してしまいました．


#pyNES
![image.png](https://qiita-image-store.s3.amazonaws.com/0/139643/d425607a-313b-739a-f886-91e003e9eb76.png)

https://gutomaia.net/pyNES/
Qiitaの記事数:**0**

Pythonでファミコンのゲームを作ろう．という試みです．これは，Pythonの処理系に入れてよいのか・・・？と思いましたが，おもしろいので紹介します．本当にPythonがファミコン上で動くのではなく，ファミコンのゲームを書くのに適した関数が用意されてる．ぐらいの認識が正しいです．


#まとめ

##開発環境と実行環境のプラットフォームが違う(変えることが出来る)
- pyMite(AVR)
- Pythonista(iOS)
- SL4A(Android)
- kivy(Multiplatform)
- Ren'py(Multiplatform)
- StacklessPSP(Play Station Portable)

##CPython以外のPythonの実装
###C言語以外
- Jython(java)
- IronPython(C#)
- Brython(javascript)
- pypy(python)

###C言語
- StacklessPython
- Unladen Swallow
- tinypy

##トランスパイラ系(Pythonから別言語へ)
- Grumpy(Go)
- Shed Skin(C++)

##その他
- pyNES

#終わりに
あれがない！これがない！みたいなこともあると思います．Anacondaは！？Jupyterは！？みたいな．基本的にCPythonの実装は抜いてて，それ以外で特徴的なものがあるものに絞っています．また，ビルドインされたCPython環境も抜いています．例えば，Blenderだったり，Mayaだったり，Metasequoiaだったり．ここまで入れ始めるとなかなか厳しかったりします．

先ほど調べてみたんですが，このようなマイナーPython環境調べてる方って他にもいるもんですね．

[らんらんら言えるかな？Pythonのなまえ〜](http://qiita.com/doloopwhile/items/d7f991f5e44163dba2a9)

この記事を読んで，

**「Goやりたい！」「それPythonでかけるよ」**
**「AVRやりたい！」「それPythonでかけるよ」**
**「Webフロントエンドやりたい！」「それPythonでかけるよ」**
**「スマホアプリ作りたい！」「それPythonでかけるよ」**

というクソリプを投げつけることができるようになります．
この記事にはPython実行環境マイナー界最弱から，割と強いところまで網羅したと思うので，これ以外でエモーショナルなPythonの実行環境があれば教えてください．地雷を踏みに行きます．よろしくお願いします！