分发 embed-cython-compiled .exe 并在没有 python 的情况下运行另一台机器
Posted
技术标签:
【中文标题】分发 embed-cython-compiled .exe 并在没有 python 的情况下运行另一台机器【英文标题】:Distribute embed-cython-compiled .exe and run another machine without python 【发布时间】:2020-09-19 06:49:47 【问题描述】:我有一个用 python 编写的小型 pyqt5 项目。我使用cython --embed
生成.cpp 文件,用MSVC 编译,它在我的机器上运行没有问题,但我想分发没有安装python 的目标机器的.exe。当我收到错误 initialization of QtCore failed without raising an exception
时,我对 pyqt 导入感到非常困惑。我尝试了各种东西,我花了一整天的时间,但简单地将必要的文件放到 .exe 位置并删除了 python36._pth
,如下
.\python36.dll
.\python36.zip (from python-3.6.5-embed-amd64.zip)
.\PyQt5 (copied from Anaconda3\Lib\site-packages)
.\platforms (required plugins for windows)
我想它也需要 sip,但我无法找到添加 pyqt5 的优雅方法,因为没有关于使用导入模块(站点包)分发嵌入式 python 的文档。 任何帮助都会非常棒。
【问题讨论】:
这与***.com/questions/52959902/… 和链接的问题不太一样,因为您准备将文件复制到它旁边。结果是它确实不是为此而设计的,您应该使用 py2exe 或类似的东西。 另外,***.com/a/56861396/5769463 描述了 python 如何在启动时搜索边包。您必须将侧包放在正确的位置或在嵌入式解释器中明确设置 python 路径 @DavidW 我知道,但我想从 cpp 构建 .dll。还有 pyinstaller 构建大尺寸 :( 大尺寸只是因为它捆绑的所有东西都是必需的。如果你成功让 Cython 工作,那么它会一样大 @ead 我也尝试了 _pth 的各种选项,但问题不在于路径。它导入 pyqt5 但提高systemerror
。我需要把 pyqt 的编译后的 pyc 放进去吗?
【参考方案1】:
我解决了添加.\sip.pyd
的问题。然后我检查了生成的文件夹大小,大约是 20 MB。使用 Pyinstaller,生成的 .exe 约为 43 MB
【讨论】:
以上是关于分发 embed-cython-compiled .exe 并在没有 python 的情况下运行另一台机器的主要内容,如果未能解决你的问题,请参考以下文章
Android 事件分发ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView )