无法导入 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 模块的主要内容,如果未能解决你的问题,请参考以下文章