16

有没有办法从 python 脚本创建一个独立的 .exe。使用 py2exe 生成的可执行文件只能使用 pythonXX.dll 运行。我想获得一个完全独立的 .exe,它不需要安装 python 运行时库。它看起来像一个链接问题,但使用静态库而不是动态库,并且应用条带以删除未使用的符号也很有用。

任何的想法 ?

谢谢。

亚历山德罗

4

5 回答 5

17

您可以在最新版本的 py2exe 中执行此操作...
只需在文件中添加类似于以下代码的setup.py内容(关键部分是 'bundle_files': 1)。

要在安装中包含您的 TkInter 包,请使用“包含”键。

distutils.core.setup(
      windows=[
            {'script': 'yourmodule.py',
             'icon_resources': [(1, 'moduleicon.ico')]
            }
      ],
      zipfile=None,
      options={'py2exe':{
                         'includes': ['tkinter'],
                         'bundle_files': 1
                        }
      }
  )
于 2009-04-01T20:48:40.567 回答
5

由于 Windows 的动态链接器的工作方式,如果您使用 .pyd 或 .dll Python 模块,您将无法使用静态库;Windows 中加载的 DLL 不会自动与可执行文件共享其符号空间,因此需要一个包含 Python 符号的单独 DLL。

于 2009-04-01T20:56:55.663 回答
4

如果您拥有单个可执行文件的目的是简化下载/发送电子邮件等,我已经通过使用Inno Setup捆绑 py2exe 输出解决了这个问题。这实际上比拥有单个可执行文件要好,因为与其提供可以拖放到某个目录中的可执行文件,一个表现良好的 Windows 应用程序将提供一个卸载程序,显示在“添加/删除程序”小程序等中。Inno 处理所有这是给你的。

于 2009-04-02T09:43:20.843 回答
2

另一种解决方案是使用 python 创建一个 exe,并在其中安装所有依赖项,包括 python.dll。包装器中有一点魔力,但它确实有效。详情在这里:

http://code.google.com/p/pylunch/downloads/detail?name=PyLunch-0.2.pdf

于 2009-04-02T03:55:42.880 回答
1

这不是最好的方法,但您可以考虑使用包含 .exe 和 .dll 文件的可执行 SFX 存档,并将其设置为在双击时执行您的 .exe 文件。

于 2009-04-01T20:44:20.640 回答