首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cx-freeze无法包含模块,即使是专门包含的

cx-freeze无法包含模块,即使是专门包含的
EN

Stack Overflow用户
提问于 2012-04-18 15:55:29
回答 2查看 4.7K关注 0票数 5

我正在尝试使用cx-freeze来创建我的应用程序( Spye Python Engine,www.spye.dk)的静态自包含发行版,但是,当我运行cx-freeze时,它会说:

代码语言:javascript
复制
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:

代码语言:javascript
复制
#!/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]
    )

请注意,我在包含列表中清楚地指定了缺少的模块。

我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2012-04-18 18:22:07

缺少模块不一定是问题:许多模块尝试不同的导入以适应不同的平台或不同版本的Python。例如,在subprocess中,您可以找到以下代码:

代码语言:javascript
复制
if mswindows:
    ...
    import _subprocess

cx_Freeze不知道这一点,所以它也会尝试在Linux/Mac上找到_subprocess,并将其报告为丢失。在includes中指定它们不会改变任何事情,因为它试图包含它们,但无法找到它们。

它无论如何都应该构建一个文件,所以试着运行它,看看它是否工作。

票数 0
EN

Stack Overflow用户

发布于 2012-04-18 16:01:28

我想,您不能简单地对列表执行+=操作。

您可能应该使用list方法extend -否则原始列表将不会被修改:

代码语言:javascript
复制
includes.extend(["BaseHTTPServer", "<rest of your modules>"])

编辑:(感谢@ThomasK)

+=运行得很好--我只有一个在线Python解释器不能正常工作。(我的Windows安装上没有安装python,所以我必须在线检查)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10205219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档