2

重複の可能性:
出力された py2exe exe は、署名されている場合にのみ実行されません: ImportError

matplotlib エラーを扱った同様の質問 ( Py2exe と matplotlib エラーで実行可能ファイルを作成する) を以前に尋ねました。しかし、私はこの段階を乗り越えました。実行可能ファイルをビルドしようとすると、パッケージ/コードがインポートされないようです。たとえば、私のコードは次のものをインポートします。

import os
import csv
import wx
import time
import math

from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from matplotlib.pyplot import figure,show
from mpl_toolkits.basemap import Basemap
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
from numpy.random import rand
from datetime import datetime
import wx.calendar as cal
import numpy as npy
from pylab import *
import numpy as np
import matplotlib
import adodbapi
import sqlparse
import pylab
import annote_new
import cPickle as pickle

実行可能ファイルを実行すると、「No Module Named os」というログ エラーが発生します。コードに含まれるすべてのモジュールでエラーが発生します (インポートする順序を変更した場合)。モジュールがインポートされないのはなぜですか? 私の Py2exe コードは次のようになります。

import os
from distutils.core import setup 
import py2exe

from distutils.filelist import findall
import matplotlib
import glob

from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from matplotlib.pyplot import figure,show
from mpl_toolkits.basemap import Basemap
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
from numpy.random import rand
from datetime import datetime
import wx.calendar as cal
import numpy as npy
from pylab import *
import numpy as np
import matplotlib
import adodbapi
import sqlparse
import pylab
import annote_new
import cPickle as pickle
import wx


setup( 


windows=[{'script': r'Scout_Tool.py'}], 


data_files = [(r'mpl-data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\*.*')),

              (r'mpl-data', [r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),
              (r'mpl-data\images',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-        data\images\*.*')),
              (r'mpl-data\fonts',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-        data\fonts\*.*'))],


#matplotlib.get_py2exe_datafiles(),

options={ 
    'py2exe':{ 
        'includes': [ 
            'matplotlib',
            'matplotlib.backends.backend_wx',
            'matplotlib.pyplot',
            'mpl_toolkits.basemap',
            'matplotlib.figure',
            'numpy.random',
            'wx.calendar',
            'mpl_toolkits', 
            'numpy', 
            'datetime', 
            'wx', 
            'pylab', 
            'adodbapi', 
            'sqlparse',
            'annote_new',
            'cPickle', 
            'pylab' 
        ], 
        'dll_excludes': ['MSVCP90.dll'],  
    } 
},


) 

py2exe を実行した後にモジュールがインポートされない理由について何か考えはありますか? ところで、py2exeコードを実行してもエラーは発生しません-生成された実行可能ファイルを実行しようとした場合のみです。ありがとう!

編集

さて、これが私がやったことです。使用していないモジュールの一部を取り出し、重複を削除しました。また、setup.py ファイルを次のように修正します。

from distutils.core import setup 
import py2exe
import matplotlib
import glob

setup( 

windows=[{'script': r'Scout_Tool.py'}], 

data_files = matplotlib.get_py2exe_datafiles(),

options={ 
        'py2exe':{ 
            'includes': [ 
                'matplotlib',
                'matplotlib.backends.backend_wx',
                'matplotlib.pyplot',
                'mpl_toolkits.basemap',
                'matplotlib.figure',
                'wx.calendar',
                'mpl_toolkits', 
                'datetime', 
                'wx', 
                'adodbapi', 
                'sqlparse',
                'annote_new',
                'cPickle', 
                'pylab' 
            ], 

        } 
    },


) 

この後、「dist」フォルダー全体をクリアして、以前から何も保持されていないことを確認しました。次に、CMDプロンプトで次を実行しました: C:\Python27\python setup.py py2exe. これはエラーなしで実行されました。

次に、Scout_Tool.exe を実行すると、最初に MatPlotLib データ エラーが発生します。なぜこれが発生するのかわかりませんが、修正するには、次のようにします。「library.zip」を解凍し、Mpl-toolkits - basemap - data から「data」フォルダーを追加してから、ライブラリを再圧縮します。フォルダ。

その後、Scout_Tool.exe を実行しようとすると、「os という名前のモジュールがありません」というエラーが表示されます。これは、Scout_Tool.py コードの最初にモジュールを配置した場合に当てはまります。

うまくいけば、これは私がいる場所に役立ちますか? ありがとう!

4

2 に答える 2

2

私はあなたのプログラム (インポート) をコンパイルしましたが、問題なく動作します。これらのモジュールを使用していない場合、py2exe が見つからないモジュール レポートは関係ありません (表示されているものと同じリストを取得しました)。

py2exe が作成する dist モジュール内で実行中に実行可能ファイルが実行されることに注意してください (たとえば、デスクトップのコピーからではありません。そのためには、直接アクセス リンクを作成する必要があります)。

于 2012-06-29T13:26:38.513 に答える
0

これを手柄にするつもりはありませんが、これらのいずれかがあなたの問題に役立ちますか?

http://www.python-forum.org/pythonforum/viewtopic.php?f=3&t=6659

出力された py2exe exe は、署名されている場合にのみ実行されません: ImportError

この質問も続きです

py2exe は os モジュールをインポートしませんか?

于 2012-06-29T13:19:11.010 に答える