2011-03-04 284 views
2

我的可执行脚本正在使用的软件包很少依赖于xlrd模块。所以我尝试使用include选项将该模块包含在安装脚本中,如图所示。但是,当runnery.py调用封装模块时,虽然xlrd文件存在于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。那么现在,我是否可以通过压缩文件使xlrd模块可用于包?即使它是通过新流程运行的吗? 问候,

+0

请注意,您的“代码”包含MS Word打开/关闭引号字符......将xlrd与win32com的'includes = [“xlrd”,“win32com”],'...进行比较......请显示您实际运行的代码;不要编辑它,也不要从内存中输入它。 – 2011-03-05 08:45:00

+0

什么会产生新的过程? runner.py?什么是您的setup.py创建的exe文件的名称?什么是生成的exe文件的名称? – 2011-03-07 23:55:55

回答

1

当您下载xlrd包,你有两个选择:

  1. 包含在你的Python路径xlrd-0.7.1\xlrd\
  2. 安装它python xlrd-0.7.1\setup.py install

一旦您已处理完毕(或一个)。确认您可以导入它。打开python并输入import xlrd。如果您看不到错误,则表示已成功安装。

+0

xlrd已成功安装在我的机器上,并且在未使用xlrd进行打包时代码运行良好...只有当我使用cx_freeze – snehal 2011-03-04 06:27:38

1

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

xlrd的安装位置在哪里?

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

始终使用原始字符串。

为什么在script=r".\\codebase\\ runner.py",中加了反斜杠? Windows似乎将多个反斜杠视为一个,但为什么它会呢?为什么在runner.py之前有空间?你确定这个设置文件实际运行吗?

+0

打包时,问题才会出现。嗨,我按照您的建议清理了setup.py文件,并将xlrd添加到软件包选项,但错误仍然存​​在。 runner.py中的空间实际上是错误的,因为我正在清理脚本以发布它:) – snehal 2011-03-07 11:36:31

1

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

0

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