即使特别包含,cx-freeze 也无法包含模块
Posted
技术标签:
【中文标题】即使特别包含,cx-freeze 也无法包含模块【英文标题】:cx-freeze fails to include modules even when included specifically 【发布时间】:2012-04-18 07:55:29 【问题描述】:我正在尝试使用 cx-freeze 来创建我的应用程序的静态自包含发行版(The Spye Python 引擎,www.spye.dk),但是,当我运行 cx-freeze 时,它显示:
Missing modules:
? _md5 imported from hashlib
? _scproxy imported from urllib
? _sha imported from hashlib
? _sha256 imported from hashlib
? _sha512 imported from hashlib
? _subprocess imported from subprocess
? configparser imported from apport.fileutils
? usercustomize imported from site
这是我的 setup.py:
#!/usr/bin/env python
from cx_Freeze import setup, Executable
includes = ["hashlib", "urllib", "subprocess", "fileutils", "site"]
includes += ["BaseHTTPServer", "cgi", "cgitb", "fcntl", "getopt", "httplib", "inspect", "json", "math", "operator", "os", "os,", "psycopg2", "re", "smtplib", "socket", "SocketServer", "spye", "spye.config", "spye.config.file", "spye.config.merge", "spye.config.section", "spye.editor", "spye.framework", "spye.frontend", "spye.frontend.cgi", "spye.frontend.http", "spye.input", "spye.output", "spye.output.console", "spye.output.stdout", "spye.pluginsystem", "spye.presentation", "spye.util.html", "spye.util.rpc", "ssl", "stat,", "struct", "subprocess", "sys", "termios", "time", "traceback", "tty", "urllib2", "urlparse", "uuid"]
includefiles=[]
excludes = []
packages = []
target = Executable(
# what to build
script = "spye-exe",
initScript = None,
#base = 'Win32GUI',
targetDir = r"dist",
targetName = "spye.exe",
compress = True,
copyDependentFiles = True,
appendScriptToExe = False,
appendScriptToLibrary = False,
icon = None
)
setup(
version = "0.1",
description = "No Description",
author = "No Author",
name = "cx_Freeze Sample File",
options = "build_exe": "includes": includes,
"excludes": excludes,
"packages": packages
#"path": path
,
executables = [target]
)
请注意,我在包含列表中明确指定了缺少的模块。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:缺少模块不一定是问题:许多模块尝试不同的导入以适应不同的平台或不同版本的 Python。以subprocess
为例,你可以找到这段代码:
if mswindows:
...
import _subprocess
cx_Freeze 不知道这一点,因此它也会尝试在 Linux/Mac 上查找_subprocess
,并将其报告为丢失。在includes
中指定它们不会改变任何东西,因为它试图包含它们,但找不到它们。
无论如何它都应该构建一个文件,因此请尝试运行它并查看它是否有效。
【讨论】:
【参考方案2】:我猜,你不能简单地把+=
列在名单上。
您可能应该使用列表方法extend
- 否则原始列表将不会被修改:
includes.extend(["BaseHTTPServer", "<rest of your modules>"])
编辑:(感谢@ThomasK)
+=
工作正常 - 我只有一个无法正常工作的在线 Python 解释器。 (我的 Windows 安装上没有安装 python,所以我必须在线查看)。
【讨论】:
对,我现在已经解决了这个问题,但我仍然得到相同的缺失模块列表。如何解决? 我在这里更新了我的 setup.py:paste.adora.dk/P2357.txt,“python setup.py build |grep -A12 Missing”的输出在这里:paste.adora.dk/P2356.txt 我刚刚搜索了您的问题,它似乎与libcrypto 相关(但没有解决方案)-也许 cx_freeze 不处理非 python 依赖项? 我希望可以。否则,在任何使用 urllib/urllib2 或 hashlib 的项目上使用 cx-freeze 似乎是不可能的。 @Gjallar:不客气。如果您需要在交互式 shell 中测试快速 sn-p,请尝试以下操作:pythonanywhere.com/try-ipython以上是关于即使特别包含,cx-freeze 也无法包含模块的主要内容,如果未能解决你的问题,请参考以下文章
即使包含 CSRF 令牌,Laravel ajax 帖子也无法正常工作
libsqlplus.so:无法打开共享对象文件:即使 PATH 包含路径,也没有这样的文件或目录
MongoTypeConversionException:即使显式架构不包含 NullTypes,也无法使用 Mongo Spark 连接器将 STRING 转换为 NullType