「1日1python」のお時間です。

exeファイルからpyファイルがimportできることを知って雷に打たれたような衝撃を受けたので紹介しとく。こういうときは「こんなのパイソニスタの皆さんなら当然知ってて、今更どや顔で見せびらかすなんて赤っ恥ものなんじゃ…」なんておくびにも出さず堂々と見せびらかすのが大事だ。

以下のようなふたつのスクリプトを準備してみる。coding:utf-8とかははぶくぞ。

# py.py

import py2
print(py2.a)
# py2.py

a = 'aaaa'

py.pyのほうを実行すると、当然結果はaaaaである。

ほんでpy.pyをcx_freezeでexe化する。以下のスクリプトを用意し python cx_freeze.py build コマンドで実行する。

# cx_freeze.py

import sys
from cx_Freeze import setup, Executable

exe = Executable(script = 'py.py')
setup(executables = [exe])

出来上がるexeファイルを実行すると、もちろんおんなじ結果が出る。

次にexeファイルのおとなりに以下のように書きなおしたpy2.pyを置いて実行してみる。

# py2.py

a = 'bbbb'

すると結果はこう。

どうやらcx_freezeでexe化したファイルの中には元のpy2.pyも生きているが、同時にimport文も生きていて、隣にモジュールがあればそれを優先して読み込むようになってるっぽい。これならpyファイルをexeの外部設定ファイルとして扱えるぜ。

この仕様、マジで便利じゃないか? これはcx_freezeの旦那が気が利くってことになるのかな。

とまあみどりんは今回何がやりたかったかってーと、ツールの設定ファイルを作りたかったわけですね。はじめはconfigparserモジュールを発見し、iniファイルを読み込むという手法でいくかと思ったんだけど、リストやディクショナリを読めないのがド不便だったんでヤメた。