我的可执行脚本使用的软件包很少依赖于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新进程运行的? 的问候,
答案 0 :(得分:1)
下载xlrd软件包时,您有两种选择:
xlrd-0.7.1\xlrd\
。python xlrd-0.7.1\setup.py install
一旦完成(任一个)。确认您可以导入它。打开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的文件时,我遇到了同样的问题。