2012-09-04 39 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(),...)'没有周围的''文件''元组? –