1. ホーム
  2. python

[解決済み] builtinsという名前のモジュールがない

2022-02-28 07:40:51

質問

py2exeを使って、.pyスクリプトを実行ファイルに変換しようとしています。これまでいくつかの問題がありましたが、それらは以下の設定ファイルの "options" によってほぼ解決されました。しかし今、私は解決策を見つけることができない問題を抱えています。他の人がこの同じ問題に直面し、それを解決したかどうか疑問に思っています。

以下のセットアップファイルを "python setup.py py2exe" で実行すると、実行ファイルはできますが、実行すると "No module named builtins" とエラーになります。

このテーマで見つけた唯一の他の投稿は、builtinsがpython3のものであることを示したが、私は2.7を実行しています。

何かアドバイスやヒントがあればお願いします。

from distutils.core import setup
import py2exe

from distutils.filelist import findall
import os
import matplotlib
matplotlibdatadir = matplotlib.get_data_path()
matplotlibdata = findall(matplotlibdatadir)



setup(
    console=['DET14.py'],
    options={
             'py2exe': {
                        'packages' : ['matplotlib', 'pytz'],
                        'dll_excludes':['MSVCP90.DLL',
                                        'libgdk-win32-2.0-0.dll',
                                        'libgobject-2.0-0.dll',
                                        'libgdk_pixbuf-2.0-0.dll'],
                        'includes':['scipy.sparse.csgraph._validation',
                            'scipy.special._ufuncs_cxx']
                       }
            },
#    data_files=matplotlibdata_files
    data_files=matplotlib.get_py2exe_datafiles()
)

以下は、エラーメッセージがどのようなものであるかの全リストです。

解決方法は?

ようやく動くようになりました。元のセットアップファイルにいくつかのエラーがあったことが判明しました。そのうちのいくつかは全く間抜けなもので、いくつかは単にセットアップコマンドのパラメータがどのように機能するかについての私の理解不足を反映したものでした。この後者のエラーは、シャーロック・ホームズ風の推理と昔ながらの試行錯誤によってのみ解決されたことを付け加えておきます。つまり、setupコマンドのパラメータの意味と使い方を説明している文書がまだ見つかっていないのです。もし誰かがその情報を持っていて、それを伝えてくれるなら、とてもありがたいことです。

そのような背景もあり、以下がその答えです。

基本的な問題は2つありました。

  1. 上記のセットアップファイルのパッケージのリストがひどく不完全でした。私はまだ、あなたのプログラムが依存するすべてのパッケージと、あなたが知らなかったパッケージ (たとえば pytz) をリストアップしなければならないという規則が正しいかどうか、確信が持てません。しかし、そうすることで、最終的に動作させることができるものをその時点で手に入れることができたのです。

  2. 上記の元の質問のエラーメッセージは、私のプログラムが "patsy" と呼ばれるものに依存していたように見えます。私はそれが何であるか分からなかったので、これは私を混乱させました。私のプロジェクトの中核であるstatsmodelsはpatsyに依存しているので、"packages"のリストに含まれる必要があることがわかりました。

以下は、最終的に動作したセットアップファイルです。この修正の背後にあるロジックの説明が、同じような問題に直面している他の人の役に立つことを期待しています。

from distutils.core import setup
import py2exe

from distutils.filelist import findall
import os
import matplotlib
matplotlibdatadir = matplotlib.get_data_path()
matplotlibdata = findall(matplotlibdatadir)



setup(
    console=['DET14.py'],
    options={
             'py2exe': {
                    'packages' : ['matplotlib', 'pytz','easygui',\
                                  'statsmodels','pandas','patsy'],
                    'dll_excludes':['MSVCP90.DLL',
                                    'libgdk-win32-2.0-0.dll',
                                    'libgobject-2.0-0.dll',
                                    'libgdk_pixbuf-2.0-0.dll'],
                    'includes':['scipy.sparse.csgraph._validation',
                        'scipy.special._ufuncs_cxx']
                   }
        },
    data_files=matplotlib.get_py2exe_datafiles()
)