Вопрос по cx-freeze, python – cx-freeze не включает модули, даже если они включены специально

5

Я пытаюсь использовать cx-freeze для создания статического автономного дистрибутива моего приложения (The Spye Python Engine,www.spye.dk), однако, когда я запускаю cx-freeze, он говорит:

<code>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
</code>

Это мой setup.py:

<code>#!/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]
    )
</code>

Обратите внимание, что я четко указал недостающие модули в списке включений.

Как это исправить?

Ваш Ответ

2   ответа
0

многие модули пробуют разные варианты импорта для поддержки разных платформ или разных версий Python. ВsubprocessНапример, вы можете найти этот код:

if mswindows:
    ...
    import _subprocess

cx_Freeze не знает об этом, поэтому попытается найти_subprocess на Linux / Mac, и сообщите об этом как об отсутствующем. Указав их вincludes ничего не меняет, потому что пытается включить их, но не может их найти.

В любом случае он должен создать файл, поэтому попробуйте запустить его и посмотреть, работает ли он.

-1

+= в списках.

Вы, вероятно, должны использовать метод спискаextend - иначе исходный список не будет изменен:

includes.extend(["BaseHTTPServer", "<rest of your modules>"])

EDIT: (Thank @ThomasK)

+= работает нормально - у меня был только онлайн-интерпретатор Python, который работал неправильно. (У меня нет установки python в моей установке Windows, поэтому я должен был проверить онлайн).

Хорошо, теперь я это исправил, но у меня все тот же список пропущенных модулей. Как исправить? ervingsb
+= должен работать для списков.
Я обновил мой setup.py здесь:paste.adora.dk/P2357.txtи вывод из & quot; python setup.py build | grep -A12 Missing & quot; это здесь:paste.adora.dk/P2356.txt ervingsb
@Gjallar: Добро пожаловать. Если вам когда-нибудь понадобится протестировать быстрый фрагмент в интерактивной оболочке, попробуйте следующее:pythonanywhere.com/try-ipython
Я просто погуглил твою проблему, и она, кажется, соотносится сlibcrypto (однако решения не было) - может быть, cx_freeze не обрабатывает не-python-зависимости?

Похожие вопросы