无法导入 xlrd 模块

Posted

技术标签:

【中文标题】无法导入 xlrd 模块【英文标题】:Unable to import xlrd module 【发布时间】:2011-03-04 05:25:14 【问题描述】:

我的可执行脚本使用的软件包很少依赖于 xlrd 模块。因此,我尝试使用如图所示的包含选项将此模块包含在设置脚本中。但是当 runnery.py 调用包模块时,尽管 library.zip 文件中存在 xlrd 文件,但模块无法导入 xlrd。

from cx_Freeze import setup, Executable
import xlrd

buildOptions = dict(
                compressed = True,
                optimize=2,
                path=sys.path+[".\\uitls", “.\\supported”],
include_files=[“Doc"],
                includes=[“xlrd”, "win32com"],
                packages=["utils", ”supported"],
                append_script_to_exe=True,
                copy_dependent_files=True,
                 )
setup(
                name = "TestExecutable",
                version = "0.1",
                options = dict(build_exe = buildOptions),
                          executables = [Executable(
                                         script=r".\\codebase\\ runner.py",
                                         icon=".\\icon.ico",
                                         base="Win32GUI")]
                ) 

如果我尝试在 runner.py 中导入 xlrd,它可以导入它。我不确定在这种情况下出了什么问题,因为依赖包无法导入 xlrd。是否有一些我遗漏的选项或我做错了什么?

更新: 我发现依赖包是通过生成一个进程来调用的,因此它创建了一个新环境,其中没有 xlrd 模块,也不知道包含它的 library.zip。所以现在,我是否有可能让 zip 文件中的 xlrd 模块对包可用,即使它是通过生成新进程来运行的? 问候,

【问题讨论】:

请注意,您的“代码”包含 MS Word 开/关引号字符...将 xlrd 与includes=[“xlrd”, "win32com"], 中的 win32com 进行比较...请显示您实际运行的代码;不要编辑它,也不要从记忆中输入它。 是什么产生了新进程?亚军.py? setup.py 创建的 exe 文件的名称是什么?生成的 exe 文件的名称是什么? 【参考方案1】:

下载 xlrd 包时,有两种选择:

    在您的 Python 路径中包含 xlrd-0.7.1\xlrd\。 安装它python xlrd-0.7.1\setup.py install

一旦你完成(任何一个)。确认您可以导入它。打开 python 并输入import xlrd。如果您没有看到任何错误,则说明它已成功安装。

【讨论】:

xlrd 已成功安装在我的机器上,并且代码在不使用 xlrd 打包时运行良好...只有当我使用 cx_freeze 打包时才会出现问题【参考方案2】:

也许path=sys.path+[".\\uitls", “.\\supported”], 中的uitls 应该是utils

xlrd 到底安装在哪里?

xlrd 是一个包,而不是一个模块;你试过把它放在包列表而不是包含列表中吗?

始终使用原始字符串。

为什么script=r".\\codebase\\ runner.py", 中的反斜杠加倍? Windows 似乎将多个反斜杠视为一个,但为什么会这样呢?为什么runner.py前面有空格?你确定这个安装文件真的运行了吗?

【讨论】:

嗨,我按照您的建议清理了 setup.py 文件并将 xlrd 添加到 packages 选项,但错误仍然存​​在。 runner.py 中的空间实际上是错误出现的,因为我正在清理脚本以发布它:)【参考方案3】:

找到解决问题的方法 我从 lib\site-packages 文件夹中复制了 xlrd 文件夹,并将其包含在 include_files 选项下。现在,当我的子进程可执行文件运行时,路径已设置,因此它知道 xlrd 的位置并且可执行文件能够导入 xlrd。

【讨论】:

【参考方案4】:

听起来 xlrd 模块没有正确安装。您可以从 Windows pip install xlrd 中的命令提示符安装,这应该可以解决您的问题。我在使用 Pandas 读取扩展名为 xlsx 的文件时遇到了同样的问题。

【讨论】:

以上是关于无法导入 xlrd 模块的主要内容,如果未能解决你的问题,请参考以下文章

Python xlrd模块导入过程及常用操作

Python xlrd模块导入过程及常用操作

Python中xlrd模块解析

【Python】xlrd模块使用

python 读取excel Xlrd模块

使用xlsxwriter模块和xlrd模块操作Excel表格