我以为我听说 py2exe 是能够做到这一点,但我从来没想到它。有没有人成功地这样做呢?我可以看看你的setup.py 文件和什么样的命令线路的选择你用?

基本上我想它给我一个可执行的文件,不喜欢的东西解压本身也许/temp和运行。

有帮助吗?

解决方案

PyInstaller 将创建一个没有依赖关系的单个.exe文件;使用 - onefile 选项。它通过将所有需要的共享库包装到可执行文件中,并在运行之前解压缩它们来完成此操作,正如您所描述的那样(编辑:py2exe也具有此功能,请参阅 minty的回答

我使用svn中的PyInstaller版本,因为最新版本(1.3)有点过时了。对于一个依赖于PyQt,PyQwt,numpy,scipy等等的应用来说,它的效果非常好。

其他提示

这样做的方法使用py2exe是使用bundle_files选择在你setup.py 文件。对于一个单一的文件,你会想要设置 bundle_files 1, compressed 来真实的,而设置的出压缩文件的选择。这样,它创建了一个压缩文件,为方便分发。

这里是一个更完整的说明bundle_file选择援引直接从 py2exe网站*

使用"bundle_files"和"出压缩文件的"

一个更简单的(和更好的)的方式来创建 单一文件可执行文件是设置 bundle_files到1或2和设置 出压缩文件。这种方法不会 不需要提取的文件 临时位置,它提供了 更快的程序的启动。

有效值bundle_files是:

  • 3的(默认)不要捆绑
  • 2束一切,但Python解释
  • 1束一切,包括Python解释

如果出压缩文件的设定,该文件将被捆绑 在可执行而不是的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将生成一个可执行文件+一些要加载的库。您还可以将一些数据添加到您的程序中。

下一步是使用安装程序将所有这些打包成一个易于使用的可安装/不可控程序。

我使用了InnoSetup( http://www.jrsoftware.org/isinfo.php 祝你好几年和商业节目,所以我衷心推荐它。

如前所述,您应该创建一个安装程序。即使也可以让py2exe将所有内容捆绑到一个可执行文件中,通过将bundle_files选项设置为1并将zipfile关键字参数设置为None,我不建议将其用于PyGTK应用程序。

这是因为GTK +尝试从其加载的目录加载其数据文件(本地,主题等)。因此,您必须确保可执行文件的目录还包含GTK +使用的库以及GTK +安装中的目录lib,share等。否则,在未在系统范围内安装GTK +的计算机上运行应用程序时会出现问题。

有关详细信息,请参阅我的 PyGTK应用程序的py2exe指南。它还解释了如何捆绑所有东西,但GTK +。

我已经能够创建一个exe文件,其中所有资源都嵌入到exe中。 我正在建造窗户。所以这将解释我正在使用的一些os.system调用。

首先,我尝试将所有图像转换为位图,然后将所有数据文件转换为文本字符串。 但这导致最终的exe非常大。

google一周后,我想出了如何改变py2exe脚本以满足我的需求。

这是我提交的sourceforge上的补丁链接,请发表评论,以便我们将其纳入 下一个发行版。

http://sourceforge.net/tracker/index。 ?PHP的FUNC =细节&安培;援助= 3334760&安培; GROUP_ID = 15583&安培; ATID = 315583个

这解释了所做的所有更改,我只是在设置行中添加了一个新选项。 这是我的setup.py。

我会尽力评论它。 请知道我的setup.py很复杂,因为我通过文件名访问图像。 所以我必须存储一个列表来跟踪它们。

这是我想要制作的一个想要的屏幕保护程序。

我使用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_strings =要包含的文件列表

请注意,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"
好吧,这就是setup.py 现在魔术需要访问图像。 我开发了这个没有py2exe的应用程序,然后添加它。 所以你会看到两种情况的访问权限。如果找不到图像文件夹 它试图从exe资源中提取图像。代码将解释它。 这是我的精灵类的一部分,它使用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!")

任何问题都可以随意提出。

我被告知 bbfreeze 将创建单个文件.EXE,并且更新比py2exe。

c_x冻结 它可以创建一个好的独立

我最近使用py2exe创建了一个可执行文件,用于将评论发送到ReviewBoard进行审核。

这是我使用的setup.py

from distutils.core import setup
import py2exe

setup(console=['post-review'])

它创建了一个包含exe文件和所需库的目录。我认为不可能使用py2exe来获取单个.exe文件。如果需要,您需要先使用py2exe然后使用某种形式的安装程序来制作最终的可执行文件。

要注意的一件事是,您在应用程序中使用的任何egg文件都需要解压缩,否则py2exe不能包含它们。这在py2exe文档中有所介绍。

不,它不会给你一个可执行文件,因为之后你只有一个文件 - 但你有一个目录,其中包含运行你的程序所需的一切,包括一个exe文件。

我今天刚刚写了这个setup.py 。您只需要调用 python setup.py py2exe

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top