无法导入xlrd模块

时间:2011-03-04 05:25:14

标签: python xlrd cx-freeze

我的可执行脚本使用的软件包很少依赖于xlrd模块。因此,我尝试使用include选项将此模块包含在设置脚本中,如图所示。但是当runnery.py调用包模块时,虽然xlrd文件存在于library.zip文件中,但模块无法导入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模块提供给包,即使它是通过spwaning新进程运行的? 的问候,

4 个答案:

答案 0 :(得分:1)

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

  1. 在您的Python路径中包含xlrd-0.7.1\xlrd\
  2. 安装python xlrd-0.7.1\setup.py install
  3. 一旦完成(任一个)。确认您可以导入它。打开python,然后输入import xlrd。如果您没有看到任何错误,则表示已成功安装。

答案 1 :(得分:1)

uitls中的path=sys.path+[".\\uitls", “.\\supported”],可能应为utils

xlrd到底安装在哪里?

xlrd是一个包,而不是一个模块;您是否尝试将其放入包列表而不是包含列表?

始终使用原始字符串。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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