Найти - Пользователи
Полная версия: NameError: name 'exit' is not defined
Начало » Python для новичков » NameError: name 'exit' is not defined
1
AxaRu
В скрипте определена функция выхода из программы
 import sys
...
...
def closeApplication():
    s = input('\nPress <Enter> for close Application')
    sys.exit(0)
...
...

полный текст скрипта можно посмотреть на github

Скрипт под Windows и Linux из под интерпретатора 3.4 и 3.5 выполняется без ошибок.
Откомпилированные в исполняемый модуль под Linux выполняется то же без ошибок.

Откомпилировал под Windows:
pyinstaller.exe --onefile KoboShelf.py

C:\Stuff>type KoboShelf.spec
# -*- mode: python -*-

block_cipher = None


a = Analysis(['KoboShelf.py'],
pathex=['C:\\Stuff'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='KoboShelf',
debug=False,
strip=False,
upx=True,
console=True )

C:\Stuff>

При компиляции выдало кучу предупреждений.

Завершается ошибкой:
C:\Stuff\dist>KoboShelf.exe
Can't find Kobo eReader.
Check mount Reader or use command line switches

Press <Enter> for close Application

Traceback (most recent call last):
File "KoboShelf.py", line 198, in <module>
File "KoboShelf.py", line 157, in main
File "KoboShelf.py", line 91, in detectUSBDrive
File "KoboShelf.py", line 34, in closeApplication
NameError: name 'exit' is not defined
Failed to execute script KoboShelf

Подскажите пожалуйста, что не так?
JOHN_16
1) я бы рекомендовал попробовать cx_freeze
2) если попробовать sys.exit(1) поведение изменится ?
AxaRu
2) если попробовать sys.exit(1) поведение изменится ?
Нет. Все то же самое.
JOHN_16
Проблема в том что данный случай не гуглится. А это может быть связанно с исключительно вашим окружением и кодом, ну и самим фактом что pyinstaller штука в целом достаточно специфичная и имеется некая вероятность проблем связанных с его использованием.
В качестве решения проблемы можете явно сделать то что делает данная функция,а именно
 raise SystemExit()
принимая во внимание все оговорки из документации
doza_and
AxaRu
Подскажите пожалуйста, что не так?
JOHN_16
pyinstaller штука в целом достаточно специфичная
А основное что не так - не надо паковать в exe. Гораздо проще воспроизвести на целевой машине часть вашего окружениа необходимого для работы приложения чем бросаться на ветряные мельницы.
AxaRu
Спасибо всем, кто откликнулся.
У меня такое ощущение, что pyinstaller плюет на строку
#!/usr/bin/python3
и считает, что код от интерпретатора 2.7

Попробую сделать кросскомпиляцию библиотек Python под Linux и соберу C-шный код под windows с помощью mingw.
doza_and
AxaRu
Попробую сделать кросскомпиляцию библиотек Python под Linux и соберу C-шный код под windows с помощью mingw.
:) pyqt отлично ставится на винду и без таких жертв.
AxaRu
doza_and
pyqt отлично ставится на винду и без таких жертв.
При чем тут PyQt?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB