我以为我听说 Py2exe能做到这一点,但我从来没有想出来。有人成功做到了吗?我能看看您的 setup.py 文件吗? 您使用了哪些命令行选项?
基本上,我想给我一个单一的可执行文件,像解压缩本身可能/temp 和运行。
不,它不会提供一个单一的可执行文件,因为之后只有一个文件——但是您有一个目录,其中包含运行程序所需的所有内容,包括一个 exe 文件。
我今天刚刚编写了 这个圈套 Py,您只需要调用 python setup.py py2exe。
python setup.py py2exe
PyInstaller 将创建一个单独的。没有依赖项的 exe 文件; 使用 --onefile选项。它将所有需要的共享库打包到可执行文件中,并在运行之前解压缩它们,正如您所描述的(EDIT: py2exe 也有这个特性,参见 薄荷味的答案)
--onefile
我使用的是来自 svn 的 PyInstaller 版本,因为最新版本(1.3)有些过时了。对于一个依赖于 PyQt、 PyQwt、 numpy、 scypy 和其他一些应用程序的应用程序来说,它运行得非常好。
我最近使用 py2exe 创建了一个可执行文件,用于发送评论到 ReviewBoard。
这就是我设的圈套
from distutils.core import setup import py2exe setup(console=['post-review'])
它创建了一个包含 exe 文件和所需库的目录。我认为不可能使用 py2exe 只获得一个。Exe 文件。如果需要,则需要首先使用 py2exe,然后使用某种形式的安装程序来生成最终的可执行文件。
需要注意的一点是,应用程序中使用的任何 egg 文件都需要解压缩,否则 py2exe 就不能包含它们。这在 py2exe 文档中有介绍。
使用 py2exe 的方法是在 setup.py 文件中使用 bundle _ files 选项。对于单个文件,您需要将 bundle_files设置为1,将 compressed设置为 True,并将 zipfile 选项设置为 Nothing。这样就可以创建一个压缩文件以便于分发。
bundle_files
compressed
下面是直接引用自 Py2exe 网站 * 的 bundle _ file 选项的更完整描述
使用“ bundle _ files”和“ zipfile” 一种更容易(也更好)的创造方式 单文件可执行文件 Bundle _ files 设置为1或2,并设置 这种方法可以 不需要将文件解压缩到 临时地点,提供 更快的程序启动。 Bundle _ files 的有效值是: 3(默认值)不捆绑 除了 Python 解释器之外的所有东西都打包 1 bundle everything,包括 Python 解释器 如果 zipfile 设置为 Nothing,则文件将是 bundle 在可执行文件中,而不是在 library. zip 中。
使用“ bundle _ files”和“ zipfile”
一种更容易(也更好)的创造方式 单文件可执行文件 Bundle _ files 设置为1或2,并设置 这种方法可以 不需要将文件解压缩到 临时地点,提供 更快的程序启动。
Bundle _ files 的有效值是:
如果 zipfile 设置为 Nothing,则文件将是 bundle 在可执行文件中,而不是在 library. zip 中。
下面是一个示例 setup.py:
from distutils.core import setup import py2exe, sys, os sys.argv.append('py2exe') setup( options = {'py2exe': {'bundle_files': 1, 'compressed': True}}, windows = [{'script': "single.py"}], zipfile = None, )
正如另一张海报提到的,py2exe,将生成一个可执行 + 一些库来加载。您还可以将一些数据添加到程序中。
py2exe
下一步是使用安装程序,将所有这些打包成一个易于使用的可安装/不可安装程序。
我已经愉快地使用 InnoSetup好几年了,并且在商业节目中使用,所以我衷心地推荐它。
我被告知 别动将创建一个单独的文件.EXE,并且比 py2exe 更新。
如前所述,您应该创建一个安装程序。尽管也可以让 py2exe 将所有内容捆绑到一个可执行文件中,但是通过将 bundle _ files 选项设置为1,将 zipfile 关键字参数设置为 Nothing,我不推荐对 PyGTK 应用程序使用这种方法。
这是因为 GTK + 试图从加载它的目录加载它的数据文件(本地文件、主题文件等)。因此,必须确保可执行文件的目录中还包含 GTK + 使用的库以及 GTK + 安装中的目录 lib、 share 等。否则,在没有在系统范围内安装 GTK + 的机器上运行应用程序时,将会出现问题。
要了解更多细节,请阅读我的 PyGTK 应用程序的 py2exe 指南。它还解释了如何捆绑一切,但 GTK + 。
我已经能够创建一个包含所有嵌入到 exe 中的资源的 exe 文件。 我在窗口上构建,这就能解释我用的一些操作系统调用了。
首先,我尝试将所有图像转换为位垫,然后将所有数据文件转换为文本字符串。 但是这使得最终的 exe 变得非常非常大。
在谷歌了一个星期后,我找到了如何修改 py2exe 脚本,以满足我的需要。
这里是我提交的关于 source ceforgei 的补丁链接,请发表评论,这样我们就可以把它包括在内 下一个发行版。
Http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583
这解释了所有的更改,我只是添加了一个新的选项到安装线。 这是我的计划 Py。
我会尽力评论的。 请注意,我的 setup.py 很复杂,因为我是通过文件名访问图像的。 所以我必须存储一个列表来跟踪他们。
这是我试着做的一个“想要 B”屏幕保护程序里的。
我使用 exec 在运行时生成我的设置,这样更容易剪切和粘贴。
exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\ 'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\ options={'py2exe': py2exe_options},\ zipfile = None )" % (bitmap_string[:-1])
崩溃
Script = py script 我想转到 exe
Icon _ resources = exe 的图标
File _ resources = 我想嵌入到 exe 中的文件
Other _ resources = 要嵌入到 exe 中的字符串,在本例中为文件列表。
Options = py2exe 选项,用于将所有内容创建到一个 exe 文件中
Bitmap _ string = 要包含的文件列表
请注意,file _ resources 不是一个有效的选项,除非您按照上面的链接中的描述编辑 py2exe.py 文件。
第一次我尝试在这个网站上发布代码,如果我错了,不要火焰我。
from distutils.core import setup import py2exe #@UnusedImport import os #delete the old build drive os.system("rmdir /s /q dist") #setup my option for single file output py2exe_options = dict( ascii=True, # Exclude encodings excludes=['_ssl', # Exclude _ssl 'pyreadline', 'difflib', 'doctest', 'locale', 'optparse', 'pickle', 'calendar', 'pbd', 'unittest', 'inspect'], # Exclude standard library dll_excludes=['msvcr71.dll', 'w9xpopen.exe', 'API-MS-Win-Core-LocalRegistry-L1-1-0.dll', 'API-MS-Win-Core-ProcessThreads-L1-1-0.dll', 'API-MS-Win-Security-Base-L1-1-0.dll', 'KERNELBASE.dll', 'POWRPROF.dll', ], #compressed=None, # Compress library.zip bundle_files = 1, optimize = 2 ) #storage for the images bitmap_string = '' resource_string = '' index = 0 print "compile image list" for image_name in os.listdir('images/'): if image_name.endswith('.jpg'): bitmap_string += "( " + str(index+1) + "," + "'" + 'images/' + image_name + "')," resource_string += image_name + " " index += 1 print "Starting build\n" exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\ 'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\ options={'py2exe': py2exe_options},\ zipfile = None )" % (bitmap_string[:-1]) print "Removing Trash" os.system("rmdir /s /q build") os.system("del /q *.pyc") print "Build Complete"
好了,设置完毕 现在魔法需要进入图像。 我开发这个应用程序时没有想到 py2exe,后来又添加了它。 如果找不到图像文件夹,那么这两种情况都可以访问 它尝试从 exe 资源中提取图像,代码将对此进行解释。 这是我的 sprite 类的一部分,它使用了 directx。但是您可以使用任何 API,或者只访问原始数据。 无所谓了。
def init(self): frame = self.env.frame use_resource_builtin = True if os.path.isdir(SPRITES_FOLDER): use_resource_builtin = False else: image_list = LoadResource(0, u'INDEX', 1).split(' ') for (model, file) in SPRITES.items(): texture = POINTER(IDirect3DTexture9)() if use_resource_builtin: data = LoadResource(0, win32con.RT_RCDATA, image_list.index(file)+1) #windll.kernel32.FindResourceW(hmod,typersc,idrsc) d3dxdll.D3DXCreateTextureFromFileInMemory(frame.device, #Pointer to an IDirect3DDevice9 interface data, #Pointer to the file in memory len(data), #Size of the file in memory byref(texture)) #ppTexture else: d3dxdll.D3DXCreateTextureFromFileA(frame.device, #@UndefinedVariable SPRITES_FOLDER + file, byref(texture)) self.model_sprites[model] = texture #else: # raise Exception("'sprites' folder is not present!")
任何问题都可以问。
C _ x 定格 它可以创建一个良好的独立