2012-09-04 41 views
0

我試圖建立一個可執行文件我的Python程序如下所示:py2exe data_files

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以及爲了使PROGRAMM工作:

matplotlib.get_py2exe_datafiles() 

但不知何故,我無法將它們包括到data_files ......我試過的東西,如下面,但我正在逐漸錯誤,如「元組」對象沒有屬性‘分裂’」

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

此外,編制工作版本沒有matplotlibfiles後,我得到我的計劃取決於其他幾個dll文件的警告 - 有什麼辦法,迫使他們一次全部加入該計劃?

感謝您的幫助!

+1

'[matplotlib.get_py2exe_datafiles()]'可能會不必要地在列表中嵌套列表。 – martineau

+0

matpolotlib.get_py2exe_datafiles()如下所示: – bigsleep

+0

[('mpl-data \\ fonts \\ pdfcorefonts',['C:\\ Python27 \\ lib \\ site-packages \\ matplotlib \\ mpl-data \\ fonts \\ pdfcorefonts \\ Courier-Bold.afm','C:\\ Python27 \\ lib \\ site-packages \\ matplotlib \\ mpl-data \\ fonts \\ pdfcorefonts \\ Courier-BoldOblique.afm', 'C:\\ Python27 \\ lib \\ site-packages \\ matplotlib \\ mpl-data \\ fonts \\ pdfcorefonts \\ Courier-Oblique.afm','C:\\ Python27 \\ lib \\ site- packages \\ ........... – bigsleep

回答

1

我設法做得到以下工作:

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"]}}) 

感謝您的迴應,這些迴應將我引向正確的方向!

1

難道matplotlib.get_py2exe_datafiles()是不是在你喜歡的方式返回文件?這是什麼輸出?

也許你需要使用列表()來代替,並刪除多餘的[]在你的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'])] 
    ) 
1

我有點疑惑要追加mpl列表現有datafiles之一。

有對以下py2exe維基的幫助看看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>', ...])] 

......這似乎是不正確的。

我猜你想在你的數據文件列表擴展(mpl你的Visual Studio dll文件(第二索引插槽)列表,你呢?

[('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 
    ... 
) 

-Colin-

+0

也許下面的示例可以幫助你:http://nullege.com/codes/search/matplotlib.get_py2exe_datafiles –

+0

謝謝,科林!不幸的是我仍然得到AttributeError :'tuple'對象沒有屬性'split' - 錯誤 – bigsleep

+0

您是否也嘗試過:'setup(... data_files = matpolotlib.get_py2exe_datafiles(),...)'沒有周圍的''文件''元組? –