Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 10, 2016 22:37:17

AxaRu
Зарегистрирован: 2015-04-11
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

NameError: name 'exit' is not defined

В скрипте определена функция выхода из программы

 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

Подскажите пожалуйста, что не так?

Отредактировано AxaRu (Сен. 11, 2016 11:04:24)

Офлайн

#2 Сен. 11, 2016 11:18:32

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

NameError: name 'exit' is not defined

1) я бы рекомендовал попробовать cx_freeze
2) если попробовать sys.exit(1) поведение изменится ?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Сен. 11, 2016 16:57:16

AxaRu
Зарегистрирован: 2015-04-11
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

NameError: name 'exit' is not defined

2) если попробовать sys.exit(1) поведение изменится ?
Нет. Все то же самое.

Офлайн

#4 Сен. 11, 2016 23:37:52

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

NameError: name 'exit' is not defined

Проблема в том что данный случай не гуглится. А это может быть связанно с исключительно вашим окружением и кодом, ну и самим фактом что pyinstaller штука в целом достаточно специфичная и имеется некая вероятность проблем связанных с его использованием.
В качестве решения проблемы можете явно сделать то что делает данная функция,а именно

 raise SystemExit()
принимая во внимание все оговорки из документации



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Сен. 12, 2016 07:25:22

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

NameError: name 'exit' is not defined

AxaRu
Подскажите пожалуйста, что не так?
JOHN_16
pyinstaller штука в целом достаточно специфичная
А основное что не так - не надо паковать в exe. Гораздо проще воспроизвести на целевой машине часть вашего окружениа необходимого для работы приложения чем бросаться на ветряные мельницы.



Офлайн

#6 Сен. 12, 2016 21:25:11

AxaRu
Зарегистрирован: 2015-04-11
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

NameError: name 'exit' is not defined

Спасибо всем, кто откликнулся.
У меня такое ощущение, что pyinstaller плюет на строку

#!/usr/bin/python3
и считает, что код от интерпретатора 2.7

Попробую сделать кросскомпиляцию библиотек Python под Linux и соберу C-шный код под windows с помощью mingw.

Офлайн

#7 Сен. 12, 2016 21:47:33

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

NameError: name 'exit' is not defined

AxaRu
Попробую сделать кросскомпиляцию библиотек Python под Linux и соберу C-шный код под windows с помощью mingw.
:) pyqt отлично ставится на винду и без таких жертв.



Офлайн

#8 Сен. 12, 2016 22:20:18

AxaRu
Зарегистрирован: 2015-04-11
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

NameError: name 'exit' is not defined

doza_and
pyqt отлично ставится на винду и без таких жертв.
При чем тут PyQt?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version