py2exeにて__file__が使えない問題と解決方法

こちらを参考にしています。

import os
directly = os.path.dirname(os.path.abspath(__file__))

このコードが入っているpyをexeにしてみたところ、見事に起動できませんでした。

次のエラーは以下の通りです。

Traceback (most recent call last):
 File "roomattack.py", line 7, in <module>
 directly = os.path.dirname(os.path.abspath(__file__))
NameError: name '__file__' is not defined

osをimportしているのにもかかわらずエラーが発生してしまいました。

調べてみると、py2exeでは__file__は使えないそうです。

ただ、sysのargv[0]は通常通り使えるそうです。
なので、次のようにしてエラーを回避します。

解決方法

import os

try:
    directly = os.path.dirname(os.path.abspath(__file__))
except NameError:  #py2exe以下では使えないため回避
    import sys
    directly = os.path.dirname(os.path.abspath(sys.argv[0]))

エラーが起きたらargv[0]を使う方法を試すっていうだけです。

多分これで動くようになると思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です