Python - 构建可执行文件时遇到问题

7 投票
4 回答
4226 浏览
提问于 2025-04-17 03:58

我是一名Python程序员,正在尝试制作一个可执行的程序,以便将我的软件分发给客户。即使这个程序不是完全可执行的,我也希望能以一种方便用户的方式来分发我的软件。

我已经尝试过PyInstaller和Py2Exe,但在处理某个特定软件时遇到了同样的问题。

我在我的程序中使用了splinter模块(这其实是一个新的高级框架,用来与其他框架如Selenium进行交互),每次我尝试编译时,总是有一个叫“webdriver.xpi”的文件被遗漏在最终的包里。因此,当程序尝试执行这个web-driver时,就会出现IO错误,提示找不到“webdriver.xpi”这个文件……不过除了这个问题,图形界面和其他功能都运行得很好。

那么,有没有办法手动将这个文件包含进去呢?我尝试过手动将它添加到特定的文件夹@ library.zip文件中,但没有成功。

我对这方面不是很专业,主要依赖GUI2Exe来构建一切……如果能得到一些建议,告诉我如何解决这个问题,我会非常感激。

谢谢。

4 个回答

1

这是你问题的一个解决办法:我稍微修改了一下代码,它应该可以正常工作,因为我之前也遇到过同样的问题,并且解决了它:

from distutils.core import setup
import py2exe

wd_base = 'C:\\Python27\\Lib\site-packages\\selenium-2.44.0-py2.7.egg    \\selenium\\webdriver'
RequiredDataFailes = [
('selenium/webdriver/firefox', ['%s\\firefox\\webdriver.xpi'%(wd_base), '%s\\firefox\\webdriver_prefs.json'%(wd_base)])
]

setup(
windows=[{"script":"gui_final.py"}],options={"py2exe":{"skip_archive": True,"includes":["sip"]}},
data_files=RequiredDataFailes,

)
1

在你的 setup.py 文件里,你需要添加一些指令来把资源文件包含进你的发布包里。实现这个有几种方法(具体取决于你使用的是哪个工具来构建你的发布包,比如 distutils、setuptools 或 distribute),不过 py2exe 的维基上有一个 示例

如果你把资源文件安装到和你的 exe 文件同一个目录下,可能需要用到 这个 py2exe 的技巧 来找到你的资源文件。

想了解更多关于如何在发布包中包含资源文件的信息,可以查看 这个回答

10

我今天花了一整天在这个问题上,终于找到了一种解决办法,虽然有点小聪明,但确实有效。在我收到的错误信息中,我注意到库的.zip文件名中有个空格。我在py2exe或selenium的源代码中找不到这个问题的根源。我也试过把xpi文件放进库的zip里,但没成功。解决办法是:

  1. 在你的设置文件中使用这些选项:

    setup(
        console=['yourFile.py'],
        options={
                "py2exe":{
                        "skip_archive": True,
                        "unbuffered": True,
                        "optimize": 2
                }
        }
    )
    
  2. 运行py2exe安装

  3. 把xpi文件复制到dist目录里

这样就可以了。

撰写回答