2019-07-17に投稿

pyenv-win を cygwin 環境で動かすためにやったこと

普段 Python3 オンリーの環境でヒャッハーと快適にコードを書き殴っている世の中のお父さん方には、夏休みに入るとやむを得ず Python2.7 と共存する環境にせざるを得ない、という方々もおられることでしょう。
なぜなら、子供にせがまれてプログラミング教室を申し込んでみたところ、 Minecraft + scratch で学ぶという点に親の方が興味を持ってしまいます。この教室で使われる「マイクラッチ」というソフトウェア自体はプログラミングスクール独自のもののようで、詳細は非公開のため同じ環境を作ることはできませんが、手元で似た環境を構築してみようと「スクラッチ(scratch)とマインクラフト(minecraft)を連携させて子ども向けプログラミングのネタを増やしてみた」という記事を参考に、RaspberryJamModhttps://github.com/scratch2mcpi/scratch2mcpi を入れたりするのですが、ここでscratch2mcpi.pyはPython3で動作しないことが発覚、泣く泣く 2.7 をインストールすることになります。

複数のバージョンのPythonを共存するには、pyenv というツールを入れるとコマンドラインから手軽に切替ができるようになるようです。WIndows 用には pyenv-win が配布されているので、入れてみました。ところが、手元の WIndows10 の cygwin 環境では pyenv が以下のエラーを出して正常に動作しませんでした。

$ pyenv versions
'ygdrive' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

修正前の pyenv-win/bin/pyenv はこのようなコードになっています。dirname で取得したパス文字列が cygwin 形式 (/cygdrive/c/foo/bar) になっている事が問題のようです。

#!/bin/sh

cmd //c call "$(dirname "$0")/pyenv.bat" $*

こちらを以下のように修正しました。

#!/bin/sh
PYENV_DOS_PATH=`cygpath -d $(dirname "$0")`
cmd /c call "$PYENV_DOS_PATH/pyenv.bat" $*

これで cygwin 環境で快適に pyenv が使えるようになりました。めでたしめでたし。
(ただ、python を対話モードで起動すると、コンソールの違いのせいかキー入力が効かなくなる事があるようです。その場合は cmd.exe を使うしかないですね…)

なお、上記前文中に「マイクラッチの詳細は不明」と書きましたが、今月(2019年7月)末にプログラミングスクールのマイクラッチ作者の方による書籍「自分で作ってみんなで遊べる! プログラミング マインクラフトでゲームを作ろう!」が出るようです。

ツイッターでシェア
みんなに共有、忘れないようにメモ

ともたこ

A programmer, desktop and web application developer, server engineer, and wannabe of indie game developer. プログラマ・デスクトップ/Webアプリ開発者・サーバエンジニア、そして個人でゲーム開発したい人です。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント