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”错误的主要内容,如果未能解决你的问题,请参考以下文章
python在powershell中运行脚本给出'非utf'错误[重复]