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

Posted

技术标签:

【中文标题】Python 编译脚本给出“无法加载插件:sqlalchemy.dialects:presto”错误【英文标题】:Python compiled script giving error of "Can't load plugin: sqlalchemy.dialects:presto" 【发布时间】:2019-04-21 09:53:22 【问题描述】:

我用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直接运行脚本不会出错 你确定--hidden-import presto 是正确的吗?似乎 DB-API 驱动程序是由PyHive 提供的。 pypi 中的包presto 似乎无关。 @IljaEverilä 是的,你是对的,我尝试了许多不同的包作为隐藏导入,但都失败了,包括 pyhive 这也可能与第 3 方方言的 registered using entry points 有关。也许 pyinstaller 需要一些手握它? 【参考方案1】:

我对 Teradata 也有类似的问题:

让 Teradata 查询在 Pyinstaller 生成的 .exe 上运行。我将引擎从 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 或其他连接选项。

【讨论】:

以上是关于Python 编译脚本给出“无法加载插件:sqlalchemy.dialects:presto”错误的主要内容,如果未能解决你的问题,请参考以下文章

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

python在powershell中运行脚本给出'非utf'错误[重复]

Python脚本给出`:没有这样的文件或目录`

从 php 执行的 python 脚本给出错误

使用右角箭头运行 python 脚本时,Vscode 给出“ModuleNotFoundError”

导入python函数给出ModuleNotFoundError [重复]