使用 cx_Freeze 编译为 exe 时没有这样的文件或目录 webdriver_prefs.json

Posted

技术标签:

【中文标题】使用 cx_Freeze 编译为 exe 时没有这样的文件或目录 webdriver_prefs.json【英文标题】:No such file or directory webdriver_prefs.json when compiling to exe with cx_Freeze 【发布时间】:2015-09-23 11:59:17 【问题描述】:

我使用 selenium firefox webdriver 编写了一个应用程序,并使用 cx_Freeze 对其进行了编译。当我启动我的应用程序时,我收到一个错误:

Traceback (most recent call last):
  File "c:\111\ui\__init__.py", line 27, in login
    self.browser = self.webdriver.Firefox()
  File "C:\Python34\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 47, in __init__
    self.profile = FirefoxProfile()
  File "C:\Python34\lib\site-packages\selenium\webdriver\firefox\firefox_profile.py", line 63, in __init__
    WEBDRIVER_PREFERENCES)) as default_prefs:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\111\\build\\exe.win32-3.4\\library.zip\\selenium\\webdriver\\firefox\\webdriver_prefs.json'

但我的 library.zip 实际上包含 webdriver_prefs.json 和 webdriver.xpi。我使用下一个 setup.py 文件来添加它:

import sys
from cx_Freeze import setup, Executable

base= 'C:\\Python34\\Lib\\site-packages\\selenium\\webdriver'

includes = [
    ('%s\\firefox\\webdriver.xpi' %(base), 'selenium/webdriver/firefox/webdriver.xpi'), 
    ('%s\\firefox\\webdriver_prefs.json '%(base), 'selenium/webdriver/firefox/webdriver_prefs.json')
]

build_exe_options = 
    "packages": ["os"], 
    "excludes": ["tkinter"],
    "zip_includes": includes,


setup(
    name = "lala", 
    version = "0.1", 
    description = "lalala", 
    options = "build_exe": build_exe_options, 
    executables = [Executable("app.py", base=base)],
)

我应该以某种方式为我的可执行文件注册这些文件吗?以及为什么 traceback 使用两种方式(一个反斜杠和两个反斜杠)打印文件路径?

【问题讨论】:

你有没有同时解决这个问题? 是的,我用 PyInstaller 解决了,你可以查看我的答案。 【参考方案1】:

最后我无法解决cx_Freeze 的问题,但后来我尝试了PyInstaller,它就像一个魅力!顺便说一句,它已经支持 Python3。我使用了那个命令:

c:\Python34\Scripts\pyinstaller.exe -p C:\Python34\Lib\site-packages -F app.py

【讨论】:

以上是关于使用 cx_Freeze 编译为 exe 时没有这样的文件或目录 webdriver_prefs.json的主要内容,如果未能解决你的问题,请参考以下文章

cx_Freeze - 从桌面快捷方式运行 .exe 时出错

cx_freeze 的 exe 错误

cx_Freeze ModuleNotFoundError: 没有名为“编解码器”的模块

cx_freeze 将项目构建为 .exe 文件,出现 numpy 导入错误

无法使用 cx_Freeze 编译

一次编译为两个 .NET Framework