Pyinstaller缺少SqlAlchemy的dll文件。

7
我正在使用 Pyinstaller 将 Python 编译为独立可执行文件。源代码包括 PySide 和 SqlAlchemy 模块。PyInstaller 创建的 dist .exe 可以正常运行,但当我运行访问数据库的命令时,在命令提示符中出现了这个错误代码:
Traceback (most recent call last):
  File "clipper_tree.py", line 1907, in add_tree
  File "build\bdist.win-amd64\egg\sqlalchemy\sql\operators.py", line 304, in __eq__
  File "build\bdist.win-amd64\egg\sqlalchemy\orm\attributes.py", line 175, in operate
  File "build\bdist.win-amd64\egg\sqlalchemy\sql\operators.py", line 304, in __eq__
  File "build\bdist.win-amd64\egg\sqlalchemy\orm\properties.py", line 270, in operate
  File "build\bdist.win-amd64\egg\sqlalchemy\sql\annotation.py", line 95, in __eq__
  File "build\bdist.win-amd64\egg\sqlalchemy\sql\operators.py", line 304, in __eq__
  File "build\bdist.win-amd64\egg\sqlalchemy\sql\elements.py", line 686, in operate
  File "build\bdist.win-amd64\egg\sqlalchemy\sql\operators.py", line 304, in __eq__
  File "<string>", line 1, in <lambda>
  File "build\bdist.win-amd64\egg\sqlalchemy\sql\type_api.py", line 62, in operate
  File "build\bdist.win-amd64\egg\sqlalchemy\util\langhelpers.py", line 964, in __getattr__
  File "build\bdist.win-amd64\egg\sqlalchemy\util\langhelpers.py", line 962, in __getattr__
ImportError: Could not resolve module sqlalchemy.sql.default_comparator

编译时,命令提示符输出了一些警告,称无法找到与SQLAlchemy相关的“隐藏DLL”。它表示正在删除响应中的SQLAlchemy/test文件。如果有帮助,将不胜感激。

2个回答

14

我之前也遇到过相同的问题。通过在我的主程序中导入sqlalchemy.sql.default_comparator来解决了这个问题。


1
成功了。我认为也可以通过为SQLAlchemy定义一个隐藏的导入来防止这个错误。 - JohnGalt
如何定义隐藏导入? - hasdrubal
1
@user1111652,你可以将模块名称作为字符串添加到Analysis初始化器的hidden参数中,该参数包含在你的pyinstaller spec文件中。请注意,spec文件是完全有效的Python代码,不必担心会破坏任何东西。 - fredpi

1
如@fredpi所说,您可以将模块添加到要编译的Python文件的.spec文件中的Analysis初始化器的hiddenimports参数中。像这样:hiddenimports=['sqlalchemy.sql.default_comparator'] 确保在运行pyinstaller时传递.spec文件,否则它将覆盖.spec文件,您的更改将丢失。例如:pyinstaller --onefile myscript.spec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接