0

次のように、Pythonプログラムの実行可能ファイルを作成しようとしています:

from distutils.core import setup
import py2exe, sys, os 
import matplotlib
import numpy
from glob import glob

sys.argv.append('py2exe')

datafiles = [('files', glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*'))]

setup(windows=['main.py'], data_files= datafiles, options={"py2exe": {"includes": ["matplotlib"]}})

これは機能しますが、プログラムを機能させるには、このコマンドで取得したこれらの matplotlibfiles も含める必要があります。

matplotlib.get_py2exe_datafiles()

しかし、どういうわけかそれらをdata_filesに含めることができません...次のようなことを試しましたが、「タプル」オブジェクトには属性「分割」がありません」などのエラーが発生します

mpl = [('files', [matplotlib.get_py2exe_datafiles()])]
datafiles.append(mpl)

また、matplotlibfiles を使用せずに作業バージョンをコンパイルした後、プロジェクトが他のいくつかの dll に依存しているという警告が表示されます。それらをすべて一度にプログラムに強制する方法はありますか?

ご協力いただきありがとうございます!

4

3 に答える 3

1

I managed to do get the following working:

datafiles = [("Microsoft.VC90.CRT", glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*'))]
datafiles.extend(matplotlib.get_py2exe_datafiles()) 

setup(windows=['main.py'], data_files= datafiles, options={"py2exe": {"includes": ["matplotlib"]}})

Thanks for your responses, which pointed me into the right direction!

于 2012-09-05T11:20:24.517 に答える
1

matplotlib.get_py2exe_datafiles() が希望する方法でファイルを返していない可能性がありますか? これの出力は何ですか?

おそらく、代わりに list() を使用し、余分な [] を mpl の周りにドロップする必要があります。

mpl = ('files', list(matplotlib.get_py2exe_datafiles()))
datafiles.append(mpl)

docsから、これは完了時にデータファイルがどのように見えるかです:

# data_files specifies a sequence of (directory, files) pairs in the following way:

setup(...,
      data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
                  ('config', ['cfg/data.cfg']),
                  ('/etc/init.d', ['init-script'])]
     )
于 2012-09-04T10:14:35.983 に答える
1

リストを既存のリストに追加したいのか、少し疑問に思っています。mpldatafiles

py2exe-wiki-help http://www.py2exe.org/index.cgi/MatPlotLibを参照すると、のリストを直接使用する必要があることがわかりますmatpotlib.get_py2exe_datafiles()

import matplotlib
...
setup(
   ...
data_files=matplotlib.get_py2exe_datafiles(), # <-- here
)

ただし、mpl(リスト) をまだ存在するリストに追加datafilesすると、連続するリストではなく、マトリックスになります。

>>> datafiles = ['<datafile_one>', '<datafile_two>']
>>> mpl = [('files', ['<mpl_file_one>', '<mpl_file_two>', ...])]
>>> print(datafiles.append(mpl)]
['<datafile_one>', '<datafile_two>', [('files', ['<mpl_file_one>',  '<mpl_file_two>', ...])]

...そして、これは正しくないようです。

データファイル リストの Visual Studio dll ファイルのリスト (2 番目のインデックス スロット)を拡張 ( mpl)したいと思いますよね?

[('files', ['<datafile_one>', '<datafile_two>', '<mpl_file_one>',  '<mpl_file_two>', ...])]

最後に、の方法を試す必要があると思います。

datafiles = glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*'))]
datafiles.extend(matplotlib.get_py2exe_datafiles())
...
setup(windows=['main.py'], 
    data_files= [('files', datafiles)], #<-- important: tuple will be build here finally
    ...
)

-コリン-

于 2012-09-04T10:18:18.843 に答える