couchbase已安装,但仍收到导入错误(Pyinstaller)



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

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

但是couchbase已经安装,我能够运行原始的Python源代码而没有任何导入错误。转换成二进制后,我得到importterror。

由于您的程序动态导入couchbasepyinstaller无法检测到它是必需的,如文档中指定的:

一些Python脚本以PyInstaller无法检测的方式导入模块:例如,通过使用变量数据的__import__()函数,或在运行时操纵sys.path值。

文档的另一部分扩展了这个问题,并建议了处理此场景的一些变通方法:

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

当代码使用__import__execeval时,可能会发生隐藏导入。您会得到这些警告(参见构建时消息)。 当扩展模块使用Python/C API执行导入时,也会发生

隐藏导入。当发生这种情况时,Analysis什么也检测不到。没有警告,只有运行时崩溃。

要找到这些隐藏的导入,设置-v标志(获取Python的详细导入)。

一旦你知道了它们是什么,你就可以使用--hidden-import=命令选项,通过编辑规范文件,或者使用钩子文件(参见下面的使用钩子文件),将所需的模块添加到包中。

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

--hidden-import=modulename
命名一个在代码中不可见的导入的Python模块。该模块将像在import语句中命名一样被包含。

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

--hidden-import=couchbase


然而,一旦PyInstaller检测到couchbase是必需的,运行结果可执行文件失败,ImportError:

ImportError: No module named _libcouchbase

这个答案描述了为了解决这个问题应该做什么。

相关内容

最新更新