分发 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 的情况下运行另一台机器的主要内容,如果未能解决你的问题,请参考以下文章

谈一道LeetCode——分发糖果

推广项目难点之数据随机分发

Android 事件分发ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView )

SCCM 2016 分发.exe 软件

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 五 )

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 三 )