我的可执行脚本使用的包很少依赖于xlrd模块。因此,我尝试使用include选项将此模块包含在安装脚本中,如下所示。但是,当runnery.py调用包模块时,模块无法导入xlrd,尽管xlrd文件存在于library.zip文件中。
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模块从zip文件中对包可用,即使它是通过启动新进程运行的?致以敬意,
发布于 2011-03-04 13:42:29
下载xlrd包时,您有两个选择:
xlrd-0.7.1\xlrd\。一旦你完成了(任一)。验证您是否可以导入它。打开python,只需输入import xlrd。如果您看不到错误,则说明它已成功安装。
发布于 2011-03-05 17:15:16
也许path=sys.path+[".\\uitls", “.\\supported”],中的uitls应该是utils。
xlrd到底安装在哪里?
xlrd是一个包,而不是一个模块;您有没有试过把它放在包列表中而不是放在包含列表中?
始终如一地使用原始字符串。
为什么在script=r".\\codebase\\ runner.py",中有两倍的反斜杠?Windows似乎将多个反斜杠视为一个,但为什么要冒险呢?为什么在runner.py前面有一个空格?您确定此安装文件真的在运行吗?
发布于 2011-03-16 13:18:04
我找到了解决这个问题的方法,我从lib\site-packages文件夹中复制了xlrd文件夹,并将其包含在include_files选项下。现在,当我的子进程可执行文件运行时,设置了路径,因此它知道xlrd的位置,并且可执行文件能够导入xlrd。
https://stackoverflow.com/questions/5190025
复制相似问题