我有一些简单的 cefpython 代码打开一个 url,并试图用 pyinstaller 创建一个独立的可执行文件:
我将文件从https://github.com/cztomczak/cefpython/tree/master/examples/pyinstaller复制到名为pyinstaller
我对 pyinstaller.spec 做了以下小改动
+SECRET_CIPHER = ""
...
- ["../wxpython.py"],
+ ["../hello.py"],
...
- icon="../resources/wxpython.ico")
+ )
我可以使用 python 在 Windows 上成功编译我的应用程序在使用 python 3.5.4 64 位和以下 virtualenv 的同一台机器上:
cefpython3==66.0
future==0.18.2
PyInstaller==3.2.1
pypiwin32==223
pywin32==228
我还可以使用 python 3.6.4 64 和以下 virtualenv 编译 windows:
altgraph==0.17
cefpython3==66.0
future==0.18.2
macholib==1.14
pefile==2019.4.18
PyInstaller==3.3.1
pyinstaller-hooks-contrib==2020.9
pypiwin32==223
pywin32==228
pywin32-ctypes==0.2.0
在 Linux 上编译也可以,但可执行文件无法运行。
我得到以下输出和错误:
CEF Python 66.0
Chromium 66.0.3359.181
CEF 3.3359.1774.gd49d25f
Python 3.5.2 64bit
[1013/180954.001980:ERROR:icu_util.cc(133)] Invalid file descriptor to ICU data received.
Trace/breakpoint trap (core dumped)
版本是 python 3.5.2 64bit,virtualenv 是:
cefpython3==66.0
pkg-resources==0.0.0
PyInstaller==3.2.1
可能是什么原因?
我尝试编译的代码如下:
import platform
import sys
from cefpython3 import cefpython as cef
def check_versions():
ver = cef.GetVersion()
print("CEF Python {ver}".format(ver=ver["version"]))
print("Chromium {ver}".format(ver=ver["chrome_version"]))
print("CEF {ver}".format(ver=ver["cef_version"]))
print("Python {ver} {arch}".format(
ver=platform.python_version(),
arch=platform.architecture()[0]))
assert cef.__version__ >= "57.0", "CEF Python v57.0+ required to run this"
def main(url="https://www.stackoverflow.com"):
sys.excepthook = cef.ExceptHook
check_versions()
settings = {}
switches = {}
browser_settings = {}
cef.Initialize(settings=settings, switches=switches)
cef.CreateBrowserSync(
url=url,
window_title="CEF_HELLO: ",
settings=browser_settings,
)
cef.MessageLoop()
cef.Shutdown()
if __name__ == "__main__":
main()
附录:2020-10-14:
linux 上与其他版本相同的错误:到目前为止,我尝试了 python 3.5 和 3.7
有没有人成功创建了可执行文件?我可能是,这只是示例项目及其配置的问题?