После создания исполняемого файла python с помощью cx_freeze файл ничего не делает.

Недавно я использовал cx_freeze для создания исполняемого файла python 3.2.2. Когда я попытался запустить exe-файл, ничего не произошло.

Вот код моего файла test.py:

print("hello world")

for i in range(5):
    print(i)

Вот код моего файла testSetup.py:

from cx_Freeze import setup, Executable

exe = Executable(
   script="test.py",
   base="Win32GUI",
   targetName="Test.exe"
   )


setup(
    name = "Test",
    version = "0.1",
    description = "I wish programming was this easy",
    executables = [exe])

Каталог сборки, созданный cx_freeze, имеет папку с именем exe.win32-3.2, в которой есть файлы:

bz2.pyd
library.zip
python32.dll
Test.exe
unicodedata.pyd


person Snake P    schedule 09.10.2012    source источник
comment
Я предполагаю, что нажатие на этот .exe должно было открыть какую-то командную строку?   -  person Ashwini Chaudhary    schedule 09.10.2012
comment
Если вы делаете это с компьютера с Windows, то p2exe намного проще.   -  person inspectorG4dget    schedule 09.10.2012
comment
он не открывал командную строку.   -  person Snake P    schedule 09.10.2012
comment
p2exe не работает с python 3.2.2   -  person Snake P    schedule 09.10.2012
comment
Какая у вас версия cx_Freeze? Если он меньше 4.3, начните с его обновления.   -  person Thomas K    schedule 15.10.2012


Ответы (2)


Мое предложение:

  1. установите base = None (попробуйте: может быть, это все, что вам нужно? base = Win32GUI "скрывает" консоль - это полезно, когда вы создаете графический интерфейс)

  2. В той же папке, что и ваш .exe, создайте пакетный файл (текстовый файл с расширением .bat), вызывающий ваш .exe:

это входит в ваш пакетный файл:

name-of-your-app.exe %1

PAUSE

Вы запустите свое приложение, щелкнув пакетный файл — он держит консоль открытой, чтобы вы могли читать ошибки/вывод.

person Chrugel    schedule 21.04.2013
comment
У меня была такая же проблема, как только я установил base = None, .exe начал печатать на консоли. - person Ameba Spugnosa; 30.10.2013
comment
получил эту ошибку: cx_Freeze.freezer.ConfigError: no base named None - person mrid; 01.05.2018

Поместите input() внизу кода и повторите попытку:

Похоже, ваш .exe запускается и существует до того, как вы что-либо видите, поэтому поместите input() внизу, чтобы скрипт ждал ввода пользователя перед выходом.

print("hello world")

for i in range(5):
    print(i)
input()
person Ashwini Chaudhary    schedule 09.10.2012
comment
Я поместил input() в конец своего кода и запустил его, но затем выскочила ошибка: «Невозможно импортировать модуль трассировки. Исключение: нет модуля с именем re Исходное исключение: input(): потерянный sys.stdin - person Snake P; 09.10.2012
comment
@AshiwiniChuadhary Я сделал то, что сказано в ссылке, но затем выдало ошибку из-за ввода. Затем я удалил строку ввода, и она снова ничего не делает, или командная строка исчезает слишком быстро, чтобы ее увидеть. - person Snake P; 09.10.2012
comment
@SnakeP, это странно, попробуйте запустить .exe через cmd, попробуйте удалить input(). - person Ashwini Chaudhary; 09.10.2012
comment
@AshiwiniChuadhary Я попробовал это в самой cmd, и с input() все равно выдавало ошибку, а без него ничего не печаталось. - person Snake P; 09.10.2012
comment
@AshiwiniChuadhary ошибка, которую он выдал, сказала: Traceback (последний последний вызов): File C:\Python32\lib\site-packages\cx_Freeze\initscripts\Console3.py,line27,in‹module›exec(code,m._dict_) Filetest.py, строка 7, in‹module›RuntimeError:input():lost sys.stdin - person Snake P; 09.10.2012