英文:
Pyinstaller - SQLAlchemy with SQLServer
问题
我有一个命令行脚本,我正在尝试使用pyinstaller构建成一个.exe文件。我正在使用SQLAlchemy来连接数据库。
import sys
from urllib.parse import quote_plus
from sqlalchemy import create_engine
# Press the green button in the gutter to run the script.
username = sys.argv[1]
password = sys.argv[2]
hostname = sys.argv[3]
engine = 'mssql+pytds'
port = sys.argv[4]
technical_name = sys.argv[5]
uri = f"{engine}://{username}:{quote_plus(password)}@{hostname}:{port}/{technical_name}"
pool = create_engine(uri)
我运行了
pyinstaller --onefile main.py
但是当我尝试在dist/文件夹中执行生成的main.exe时,我收到了错误信息:
> sqlalchemy.exc.NoSuchModuleError: 无法加载插件:sqlalchemy.dialects:mssql.pytds
如何为SQLAlchemy包含mssql.pytds?我在我的环境和requirements.txt中安装了sqlalchemy-pytds和python-tds。
编辑:当我简单运行以下代码时,上述代码成功执行:
python main.py user pw 127.0.0.1 1433 dbname
英文:
I have a command line script I'm trying to build to an .exe file using pyinstaller. I'm using SQLAlchemy to connect to a database.
import sys
from urllib.parse import quote_plus
from sqlalchemy import create_engine
# Press the green button in the gutter to run the script.
username = sys.argv[1]
password = sys.argv[2]
hostname = sys.argv[3]
engine = 'mssql+pytds'
port = sys.argv[4]
technical_name = sys.argv[5]
uri = f"{engine}://{username}:{quote_plus(password)}@{hostname}:{port}/{technical_name}"
pool = create_engine(uri)
I run
pyinstaller --onefile main.py
But when I try to execute the resulting main.exe in the dist/ folder, I get the error:
> sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:mssql.pytds
How can I include mssql.pytds for sqlalchemy? I have sqlalchemy-pytds and python-tds installed in my environment and in requirements.txt
Edit: The above code executes successfully executes when I simply run
python main.py user pw 127.0.0.1 1433 dbname
答案1
得分: 1
我刚刚弄清楚了。最后,我将所有的导入都明确地添加到Python脚本中。我一次处理一个错误消息,添加它所说缺少的内容。
供后人参考,以下是导入部分的版本,允许我构建和运行程序作为exe:
import sys
from urllib.parse import quote_plus
from sqlalchemy import create_engine
import sqlalchemy_pytds
import sqlalchemy.sql.default_comparator
import sqlalchemy.engine.default
import sqlalchemy
import sqlalchemy_pytds.dialect
我猜想可能有更好的方法来做这件事,但我会在这里分享并使用这个方法,因为它对我有效。如果有任何更"干净"的解决方案/最佳实践,请继续分享,我愿意接受其他答案。
英文:
Just figured it out. I ended up added all imports to the python script explicitly. I worked my way through it one error message at a time, adding whatever it said was missing.
For posterity, the version of the import section that allowed me to build and run the program as an exe:
import sys
from urllib.parse import quote_plus
from sqlalchemy import create_engine
import sqlalchemy_pytds
import sqlalchemy.sql.default_comparator
import sqlalchemy.engine.default
import sqlalchemy
import sqlalchemy_pytds.dialect
Guessing there is a a better way to do this, but sharing here and will use this since it works for me. Would still interested if there are any 'cleaner' solutions/best practices here, and happy to accept another answer.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论