cx_Freeze exe在运行时使用psycopg2会导致sqlalchemy. exe . nosuchmodule



编辑:当可执行文件试图访问psycopg2包时,我可以使用什么工具来查看它试图查找的包/文件?也许这可以帮助分析出问题的地方。

我有一个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)
  1. 我已经尝试将'psycopg2'添加到包含列表和包列表。
  2. 我已经安装了psycopg2二进制安装程序。
  3. 我已经确定'psycopg2'不在包含或包列表中。
  4. 我已经安装了MS Visual c++ 2008可重新发布的x64和x86包。
  5. Mike Bayer说类似的错误是由于连接字符串不是我认为的,但我正在打印我的conn字符串,就在我创建引擎之前,它是正确的。它只有在冻结时才会断开,而相同的连接字符串在其他情况下工作正常。
  6. 我有另一个冻结的脚本运行没有错误。这两个脚本使用相同的方法从sqlalchemy创建引擎和元数据对象。我尝试将psycopg2文件从工作的可执行文件夹复制到损坏的文件夹,但没有结果。我试着在随机的文件上复制,但没有成功。

我正在从base64编码的ht_db_config.cfg文件中读取连接字符串,但我在尝试sqlalchemy.create_engine()之前打印出字符串,并且它是正确的。我还添加了一个字符串字面值作为sqlalchemy的参数。Create_engine方法,冻结的可执行文件失败。失败的脚本的实际输出是:

postgresql+psycopg2://user_name:password@10.121.123.10:5432/ht_cg_prod

我已经替换了用户名和密码。

这几天我一直在努力解决这个问题。我很感激任何帮助。我正在运行python 3.4, sqlalchemy 1.0.8, cx_freeze 4.3.4和psycopg2 2.6,由windows 8.1上的"conda list"确定。谢谢。

我终于找到了答案。在cx_freeze邮件列表中,其他人也遇到了同样的问题。解决方法是加'sqlalchemy.dialects.postgresql'到cx_freeze构建选项中的包列表中。

最新更新