如何编译使用 sqlalchemy 的 pyqt 脚本?

Posted

技术标签:

【中文标题】如何编译使用 sqlalchemy 的 pyqt 脚本?【英文标题】:How do I compile a pyqt script that uses sqlalchemy? 【发布时间】:2020-03-02 00:38:27 【问题描述】:

我尝试使用 pyinstaller 和 fbs 将我的 python 脚本(只有一个)打包成一个独立的应用程序。他们都没有错误地构建,但是当我尝试运行二进制 pyinstaller 时给出了这个消息:

/Users/mac/Desktop/mtime/dist/main/main ; exit;
objc[53699]: Class RunLoopModeTracker is implemented in both /Users/mac/Desktop/mtime/dist/main/libQt5Core.5.dylib (0x1081dba80) and /Users/mac/miniconda3/envs/chessapp/lib/libQt5Core.5.9.7.dylib (0x10e377a80). One of the two will be used. Which one is undefined.
objc[53699]: Class NotificationReceiver is implemented in both /Users/mac/Desktop/mtime/dist/main/libQt5Widgets.5.dylib (0x1079691b8) and /Users/mac/miniconda3/envs/chessapp/lib/libQt5Widgets.5.9.7.dylib (0x10db051b8). One of the two will be used. Which one is undefined.
QObject::moveToThread: Current thread (0x7f8b98f27c80) is not the object's thread (0x7f8b9b08ff30).
Cannot move to target thread (0x7f8b98f27c80)

You might be loading two sets of Qt binaries into the same process. Check that all plugins are compiled against the right Qt binaries. Export DYLD_PRINT_LIBRARIES=1 and check that only one set of binaries are being loaded.
This application failed to start because it could not find or load the Qt platform plugin "cocoa"
in "".

Available platform plugins are: cocoa, minimal, offscreen.

Reinstalling the application may fix this problem

FBS 也失败了。

我知道我做过的两件不寻常的事情是我在我的脚本中使用了 sqlalchemy,并且我使用了 conda。

有人知道可能的解决方案吗?如果 sqlalchemy 不能很好地与这些工具配合使用,我愿意在必要时为我的小脚本使用不同的持久性方法(这是术语吗?)。

顺便说一句,我在 mac 上编译。

【问题讨论】:

您是否尝试过构建一个简单而基本的程序,只是为了确保它能够正常工作?如果是这样,我建议您创建程序的精简版本,如果仍然无法正常工作,请向我们展示其代码。 好建议。创建一个简单的应用程序表明它不能很好地与 conda 配合使用。一个venv成功了。 pyinstaller 也可以合并 sqlalchemy 文件,这很酷。 @squirrels 添加一个答案,这是由于 conda Env 弄乱了您的构建。这会将问题标记为已回答。 【参考方案1】:

这是由于 conda env 搞乱了构建。只需创建一个venv就可以了(您可以使用conda来选择python版本)

【讨论】:

也选择这个作为正确答案,并在投票按钮下方打勾。

以上是关于如何编译使用 sqlalchemy 的 pyqt 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 如何在编译后更新资源文件?

20190131 经验总结:如何从rst文件编译出自己的sqlalchemy的文档

打印编译的 sqlalchemy 查询

迭代sqlalchemy ORM记录

使用 Sqlalchemy 连接和 Postgres 从原始字符串编译查询(不使用 .text(...))

使用 QtWebEngine 编译 PyQt5 应用程序