2014-04-18 59 views
3

你好Stackoverflowers的,py2exe - 创建一个可执行文件出来一个文件夹

我一直在试图建立一个可执行文件出其中包含一个python脚本和其他一些模块和文件(注意文件夹:我如果这很重要,也使用Tkinter)。

我已经看过lot有关这个问题/答案,并尝试过他们,但他们都没有为我工作。

这里是我的文件夹的样子:

python-calendar    #base-folder 
| 
|___apliclient     #module 
|___httplib2     #module 
|___oauth2client    #module 
|___uritemplate    #module 
|___client_secrets.json  #used by program.py 
|___program.py     #my main script 
|___program.dat    #updated by program.py 

我的问题是:
如何建立一个可执行文件,该文件组中的所有这些文件/文件夹在一起成为一个单一的,独立的可执行文件可以运行?

这是我的setup.py文件看起来像此刻的py2exe安装但是当我运行我的可执行文件,没有任何反应(无论是从文件夹,并通过命令行)。

from distutils.core import setup 
import py2exe, sys, os 

sys.argv.append('py2exe') 

setup(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True, "includes" : ['apiclient','httplib2','oauth2client', 
         'uritemplate'] }}, 
    console = ["program.py"], 
    zipfile = None, 
    data_files=['client_secrets.json'] 
) 

如何使用py2exe这个或任何其他可执行的创造者是真正有用的任何指导。先谢谢你。

回答

2

我找到了解决方案的一部分。首先,修改setup.py是这样的:

from distutils.core import setup 
import py2exe, sys, os 

sys.argv.append('py2exe') 
PROGRAM_DAT  = open('program.dat').read() 
CLIENT_SECRETS = open('client_secrets.json').read() 

setup(windows=[{'script': "program.py", 
      'other_resources': [ 
       (u'PROGRAM_DAT', 1, PROGRAM_DAT), 
       (u'CLIENT_SECRETS', 2, CLIENT_SECRETS) 
      ] 
      }], 
      options = {'py2exe': {'bundle_files': 1, 'compressed': True, "includes" : ['apiclient','httplib2','oauth2client', 
        'uritemplate']} 
      }, 

      zipfile = None 
) 

如果你想建立控制台应用程序,只需更改setup(windows=setup(console=

在program.py你可以加载资源这样的:

import win32api 
from StringIO import StringIO 

datfile = StringIO(win32api.LoadResource(0, u'PROGRAM_DAT', 1)) 
print datfile.getvalue() 

secrets = StringIO(win32api.LoadResource(0, u'CLIENT_SECRETS', 2)) 
print secrets.getvalue() 

但没有办法从Program.exe文件修改的Program.exe。要保存您在嵌入式program.dat中的更改,您需要另一个exe文件。然后,您可以使用win32api.BeginUpdateResource,win32api.UpdateResourcewin32api.LoadResource函数。

相关问题