cx_Freeze exe 在 运行 时使用 psycopg2 产生 sqlalchemy.exc.NoSuchmoduleError
cx_Freeze exe results in sqlalchemy.exc.NoSuchmoduleError with psycopg2 at run time
编辑:当可执行文件试图访问 psycopg2 包时,我可以使用什么工具来查看 packages/file 可执行文件试图查找的内容?也许这可以帮助分析哪里出了问题。
我有一个 python 脚本,当 运行 使用解释器时,它 运行 非常好,但当我冻结它时,我收到错误:
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgresql.psycopg2
因为它 运行 可以通过解释器正常运行而在冻结时失败,我怀疑我的 setup.py 文件有问题。
#-*- coding: 'utf-8' -*-
from cx_Freeze import setup, Executable
import sys
# Dependencies are automatically detected, but it might need
# fine tuning.
# execute this file with the command: python setup.py build
buildOptions = dict(packages = ['ht_cg.ht_cg_objects'],
includes = ['ht_cg.ht_cg_objects'],
excludes = ['tkinter', 'PyQt4', 'matplotlib', 'tcl', 'scipy'],
include_files = ['./cg_source_prep/readme.txt', "./ht_cg_objects/ht_db_config.cfg"],
build_exe = 'build/source_density_exe')
sys.path.append('./')
sys.path.append('../')
executables = [
Executable(script = "cg_source_save.py",
initScript = None,
base='Console',
targetName = 'source_density_save.exe',
copyDependentFiles = True,
compress = True,
appendScriptToExe = True,
appendScriptToLibrary = True,
shortcutName="CG Source Density",
shortcutDir='DesktopFolder',
icon = "./cg_source_prep/archimedes.ico"
)
]
setup(name='Source_Density',
version = '1.0',
description = 'Source Density Uploader',
author = 'zeppelin_d',
author_email = 'zeppelin_d@email',
options = dict(build_exe = buildOptions),
executables = executables)
- 我已经尝试将 'psycopg2' 添加到包含列表和包列表中。
- 我已经安装了 psycopg2 binary installer。
- 我已确定 'psycopg2' 不在包含或包列表中。
- 我已经安装了 MS Visual C++ 2008 可再发行 x64 和 x86 软件包。
- Mike Bayer says a similar error is due to the connection string not being what I think it is 但我在创建引擎之前打印了我的连接字符串,它是正确的。它只有在冻结时才会损坏,否则相同的连接字符串可以正常工作。
- 我还有另一个 运行 没有错误的冻结脚本。这两个脚本使用相同的方法从 sqlalchemy 创建引擎和元数据对象。我试过将 psycopg2 文件从工作的可执行文件夹复制到损坏的文件夹,但没有结果。我试过复制随机 dll,但没有成功。
我正在从 ht_db_config.cfg 文件中读取 base64 编码的连接字符串,但我在尝试 sqlalchemy.create_engine() 之前打印出了该字符串,它是正确的。我还添加了一个字符串文字作为 sqlalchemy.create_engine 方法的参数,冻结的可执行文件失败了。失败脚本的实际输出是:
postgresql+psycopg2://user_name:password@10.121.123.10:5432/ht_cg_prod
我已经替换了用户名和密码。
几天来我一直在努力解决这个问题。如果有任何帮助,我将不胜感激。我是 运行ning python 3.4、sqlalchemy 1.0.8、cx_freeze 4.3.4 和 psycopg2 2.6,由 'conda list' 在 windows 8.1 上确定。谢谢。
我终于找到了答案。在 cx_freeze mailing list 上,其他人遇到了同样的问题。解决方案是添加
'sqlalchemy.dialects.postgresql'
在 cx_freeze 构建选项中我的包列表。
编辑:当可执行文件试图访问 psycopg2 包时,我可以使用什么工具来查看 packages/file 可执行文件试图查找的内容?也许这可以帮助分析哪里出了问题。
我有一个 python 脚本,当 运行 使用解释器时,它 运行 非常好,但当我冻结它时,我收到错误:
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgresql.psycopg2
因为它 运行 可以通过解释器正常运行而在冻结时失败,我怀疑我的 setup.py 文件有问题。
#-*- coding: 'utf-8' -*-
from cx_Freeze import setup, Executable
import sys
# Dependencies are automatically detected, but it might need
# fine tuning.
# execute this file with the command: python setup.py build
buildOptions = dict(packages = ['ht_cg.ht_cg_objects'],
includes = ['ht_cg.ht_cg_objects'],
excludes = ['tkinter', 'PyQt4', 'matplotlib', 'tcl', 'scipy'],
include_files = ['./cg_source_prep/readme.txt', "./ht_cg_objects/ht_db_config.cfg"],
build_exe = 'build/source_density_exe')
sys.path.append('./')
sys.path.append('../')
executables = [
Executable(script = "cg_source_save.py",
initScript = None,
base='Console',
targetName = 'source_density_save.exe',
copyDependentFiles = True,
compress = True,
appendScriptToExe = True,
appendScriptToLibrary = True,
shortcutName="CG Source Density",
shortcutDir='DesktopFolder',
icon = "./cg_source_prep/archimedes.ico"
)
]
setup(name='Source_Density',
version = '1.0',
description = 'Source Density Uploader',
author = 'zeppelin_d',
author_email = 'zeppelin_d@email',
options = dict(build_exe = buildOptions),
executables = executables)
- 我已经尝试将 'psycopg2' 添加到包含列表和包列表中。
- 我已经安装了 psycopg2 binary installer。
- 我已确定 'psycopg2' 不在包含或包列表中。
- 我已经安装了 MS Visual C++ 2008 可再发行 x64 和 x86 软件包。
- Mike Bayer says a similar error is due to the connection string not being what I think it is 但我在创建引擎之前打印了我的连接字符串,它是正确的。它只有在冻结时才会损坏,否则相同的连接字符串可以正常工作。
- 我还有另一个 运行 没有错误的冻结脚本。这两个脚本使用相同的方法从 sqlalchemy 创建引擎和元数据对象。我试过将 psycopg2 文件从工作的可执行文件夹复制到损坏的文件夹,但没有结果。我试过复制随机 dll,但没有成功。
我正在从 ht_db_config.cfg 文件中读取 base64 编码的连接字符串,但我在尝试 sqlalchemy.create_engine() 之前打印出了该字符串,它是正确的。我还添加了一个字符串文字作为 sqlalchemy.create_engine 方法的参数,冻结的可执行文件失败了。失败脚本的实际输出是:
postgresql+psycopg2://user_name:password@10.121.123.10:5432/ht_cg_prod
我已经替换了用户名和密码。
几天来我一直在努力解决这个问题。如果有任何帮助,我将不胜感激。我是 运行ning python 3.4、sqlalchemy 1.0.8、cx_freeze 4.3.4 和 psycopg2 2.6,由 'conda list' 在 windows 8.1 上确定。谢谢。
我终于找到了答案。在 cx_freeze mailing list 上,其他人遇到了同样的问题。解决方案是添加
'sqlalchemy.dialects.postgresql'
在 cx_freeze 构建选项中我的包列表。