couchbase已安装但仍导致导入错误(Pyinstaller)

时间:2015-06-10 09:35:50

标签: python python-2.7 couchbase pyinstaller

我正在尝试使用pyinstaller构建python源代码。一旦构建成功,我正在运行二进制文件。运行二进制文件后,我得到以下ImportError

PyUtils.CouchbaseClient", line 13, in <module>
ImportError: No module named couchbase

couchbase已经安装,我可以运行原始Python源代码而不会出现任何导入错误。转换为二进制文件后,我得到ImportError。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:3)

由于您的程序动态导入 couchbase pyinstaller 无法检测到它是必需的,如documentation中所述:

  

某些 Python 脚本以 PyInstaller 无法检测到的方式导入模块:例如,通过将__import__()函数与变量数据一起使用,或者操纵{{ 1}}运行时的值。

Another section of the documentation针对此问题进行了扩展,并提出了处理此方案的一些解决方法:

  

如果Analysis认为已找到所有导入,但应用程序因导入错误而失败,则问题是隐藏导入;也就是说,分析阶段不可见的导入。

     

当代码使用sys.path__import__exec时,可能会发生隐藏导入。您会收到有关这些警告(请参阅Build-time Messages)。

     

当扩展模块使用 Python / C API 进行导入时,也会发生隐藏导入。发生这种情况时,Analysis无法检测到任何内容没有警告,只有运行时崩溃。

     

要查找这些隐藏的导入,请设置eval标记(Getting Python's Verbose Imports上方)。

     

一旦你知道它们是什么,你可以使用-v命令选项,编辑spec文件或使用钩子文件(见下面的Using Hook Files)将所需的模块添加到包中。 / p>

因此,您需要明确要求 pyinstaller 在构建过程中包含所需的模块。似乎最简单的方法是使用--hidden-import参数:

  

--hidden-import=
  命名导入的 Python 模块,该模块在代码中不可见。该模块将被包含,就像它在--hidden-import=modulename语句中命名一样。此选项可以多次出现。

因此,请在构建应用程序时添加以下参数:

import

但是,一旦 PyInstaller 检测到需要--hidden-import=couchbase,运行生成的可执行文件就会失败并显示couchbase

ImportError

This answer描述了解决问题的方法。