Python编译脚本出现“无法加载插件:sqlalchemy.dialects:presto”的错误。

5
我使用pyinstaller编译.py文件的方法如下:
pyinstaller --hidden-import presto --hidden-import scipy._lib.messagestream  --onefile main.py

当我运行编译后的文件时,出现了错误:
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:presto

我使用sqlalchemy.engine连接到presto,如下:

engine = create_engine('presto://presto.service.example.com:8080/hive/default')

我在谷歌上没有发现有用的内容。

如果你在不编译的情况下运行 main.py,错误就不会发生了吗? - SuperShoot
@SuperShoot 当直接运行脚本时没有出现任何错误。 - nullne
2
你确定 --hidden-import presto 是正确的吗?看起来 DB-API 驱动程序是由 PyHive 提供的。在 pypi 中的 presto 包似乎与此无关。 - Ilja Everilä
@IljaEverilä 是的,你说得对。我尝试了许多不同的包作为隐藏导入,但都失败了,包括pyhive。 - nullne
这可能也与如何使用入口点注册第三方方言有关(https://github.com/zzzeek/sqlalchemy/blob/master/README.dialects.rst)。也许pyinstaller需要一些手把手的指导? - Ilja Everilä
@IljaEverilä 我还是不知道怎么做 :< - nullne
2个回答

0

只需要将这些内容包含到你的脚本中:

from sqlalchemy.dialects import registry

registry.register('presto', 'pyhive.sqlalchemy_presto', 'PrestoDialect')

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0

我曾经遇到过与Teradata类似的问题:

为了让Pyinstaller生成的.exe文件能够运行Teradata查询,我将我的引擎从SQLAlchemy改为了Teradata。

原文:

import sqlalchemy as sa
user, pasw, hostname = UserName,Password, 'myurl.com'
# connect
td_engine = sa.create_engine('teradata://{}:{}@{}:22/'.format(user,pasw,hostname),echo=True)
df = pd.read_sql_query(query1,connect)

收件人:

import teradata
user, pasw, hostname = UserName,Password, 'myurl.com'
td = teradata.UdaExec (appName="test", version="1.0", logConsole=True)
td_engine = td.connect(method="odbc",system=hostname, username=user,password=pasw,driver="Teradata") 

或许可以从SQLAlchemy切换到pyodbc或其他连接选项。


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