Python - 构建可执行文件时遇到问题
我是一名Python程序员,正在尝试制作一个可执行的程序,以便将我的软件分发给客户。即使这个程序不是完全可执行的,我也希望能以一种方便用户的方式来分发我的软件。
我已经尝试过PyInstaller和Py2Exe,但在处理某个特定软件时遇到了同样的问题。
我在我的程序中使用了splinter模块(这其实是一个新的高级框架,用来与其他框架如Selenium进行交互),每次我尝试编译时,总是有一个叫“webdriver.xpi”的文件被遗漏在最终的包里。因此,当程序尝试执行这个web-driver时,就会出现IO错误,提示找不到“webdriver.xpi”这个文件……不过除了这个问题,图形界面和其他功能都运行得很好。
那么,有没有办法手动将这个文件包含进去呢?我尝试过手动将它添加到特定的文件夹@ library.zip文件中,但没有成功。
我对这方面不是很专业,主要依赖GUI2Exe来构建一切……如果能得到一些建议,告诉我如何解决这个问题,我会非常感激。
谢谢。
4 个回答
这是你问题的一个解决办法:我稍微修改了一下代码,它应该可以正常工作,因为我之前也遇到过同样的问题,并且解决了它:
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,
)
在你的 setup.py
文件里,你需要添加一些指令来把资源文件包含进你的发布包里。实现这个有几种方法(具体取决于你使用的是哪个工具来构建你的发布包,比如 distutils、setuptools 或 distribute),不过 py2exe 的维基上有一个 示例。
如果你把资源文件安装到和你的 exe 文件同一个目录下,可能需要用到 这个 py2exe 的技巧 来找到你的资源文件。
想了解更多关于如何在发布包中包含资源文件的信息,可以查看 这个回答。
我今天花了一整天在这个问题上,终于找到了一种解决办法,虽然有点小聪明,但确实有效。在我收到的错误信息中,我注意到库的.zip文件名中有个空格。我在py2exe或selenium的源代码中找不到这个问题的根源。我也试过把xpi文件放进库的zip里,但没成功。解决办法是:
在你的设置文件中使用这些选项:
setup( console=['yourFile.py'], options={ "py2exe":{ "skip_archive": True, "unbuffered": True, "optimize": 2 } } )
运行py2exe安装
- 把xpi文件复制到dist目录里
这样就可以了。