#125 Windows用Pythonランチャー py.exe

今日、こんなことがありました。
事の次第は、今まで直接実行できていたあるPythonファイルが、何故かImportErrorで立ち上がらなくなっていたのです。
python hoge.py のように実行したときは上手くいきます。
私のつぶやきに、 @wonderful_panda さんと @methane さんがいろいろとアドバイスをくれました。
あぁ、最近 Python 3.3 を入れたから、その辺で何かあるのかもなぁと思って、(Windows XPだったので)フォルダオプションからファイルの関連づけを確認してみると…。
拡張子 .py のファイルに対して、謎の実行ファイル py.exe が %WINDIR% 直下に出来ていて、それが open 操作に紐付いていました。

とりあえず、紐付く実行ファイルが違っていたのが原因っぽいということをお二人に報告すると、
えっ(・_・;)

Windows用Pythonランチャー

@methane さんから聞くところによると、これは Python 3.3 からの新機能のようです。

3.4. Python Launcher for Windows - Python v3.4.0a0 documentation

私の環境には、 Python 2.7.3、3.2.3、3.3.0 が同居しており、この py.exe を使うと次のような動作をします。
C:\home>py
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
この py.exe、 オプションにバージョン番号を渡すことが出来ます。

まず -2 オプションを渡してみましょう。
C:\home>py -2
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
このように、Python 2 系である Python 2.7.3 の Interactive が立ち上がります。

続いて、-3 オプション。
C:\home>py -3
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
今度は Python 3.3.0 の Interactive が立ち上がりました。
Python 3.2.3 でなかったのは、直近でインストールしたのが Python 3.3.0 であったためです。

試しに、もっと詳細なバージョンを py.exe に教えてみます。
C:\home>py -3.2
Python 3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
ちゃんと Python 3.2.3 の Interactive が立ち上がりました。

環境変数 PY_PYTHON

さて、このバージョンセレクターはなかなか便利なんですが、デフォルトが2系だと私はあまり都合がよくありません。
Python 3系、出来れば 3.3 をデフォルトで使いたいです。
そんな時に、環境変数 PY_PYTHON を設定します。

環境変数 PY_PYTHON と py.exe はおおよそ次のルールに従います。
  • 特に何のオプションも設定していない場合、python (オプション無し)や python2 (-2 オプション)のコマンドで最後にインストールした Python 2系を起動し、 python3 (-3 オプション)のコマンドで最後にインストールした Python 3系を起動します。
  • python3.1 (-3.1 オプション)や python2.7 (-2.7 オプション)のコマンドでは、指定したバージョンの Python を起動します。 
  • PY_PYTHON=3 と設定している場合、python および python3 のコマンドで最後にインストールした Python 3系を起動します。
  • PY_PYTHON=3.1-32 と設定している場合、python3 のコマンドでは最後にインストールした Python を使う一方、 python のコマンドで 32bit の Python 3.1 を起動します。
  • PY_PYTHON=3 かつ PY_PYTHON3=3.1 と設定している場合、python および python3 コマンドのいずれでも Python 3.1 を起動します。
(上記ドキュメントの記載を抄訳しました) 

ですので、私の場合は PY_PYTHON=3 と設定しておくだけで、 py.exe は Python 3.3.0 を優先して使ってくれるようになります。
つまり、これで発端となった直接 Python ファイルを実行することでの ImportError も出なくなったのです。 

まとめ

Python 3.3 はステキ!
py かわいいよ py _(:3 」∠)_

トラックバックURL

#125 Windows用Pythonランチャー py.exe へのトラックバック

まだトラックバックはありません。

#125 Windows用Pythonランチャー py.exe へのコメント一覧

まだコメントはありません。

コメントする

#125 Windows用Pythonランチャー py.exe にコメントする
絵文字
プロフィール
あわせて読みたい
あわせて読みたい
記事検索
Project Euler
なかのひと
アクセス解析
Coderwall
  • ライブドアブログ

トップに戻る