Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

PyInstaller выбрасывает IndexError: tuple index out of range ошибку при сборке Python3.6 скрипта в exe

#python #pyinstaller #python_36


Всем привет! Есть 1 готовый скрипт Python, хочу его собрать в exe, например через
cx_Freeze или Pyinstaller. Но в обоих случаях вылезает ошибка при сборке IndexError:
tuple index out of range, причем если запускать скрипт из командной строки, то все
робит норм. Вот собственно сам скрипт:

#скрипт заменяет цифру на следующую в конце, если в конце буква- добавляет цифру 1
inp = open ('C:\\inp.txt', 'r')
out = open ('C:\\out.txt', 'w')
#тут читаю файл построчно
for line in inp:
    # Удаляем символы переноса строки с конца
    line = line.rstrip('\r\n')
    # Записываем всю строку, кроме последнего символа
    out.write(line[:-1])
    # Проверяем последний символ
    if line[-1] == '1':
        out.write('2')
    elif line[-1] == '2':
        out.write('3')
    elif line[-1] == '3':
        out.write('4')
    elif line[-1] == '4':
        out.write('5')
    elif line[-1] == '5':
        out.write('6')
    elif line[-1] == '6':
        out.write('7')
    elif line[-1] == '7':
        out.write('8')
    elif line[-1] == '8':
        out.write('9')
    elif line[-1] == '9':
        out.write('0')                          
    else:
        out.write(line[-1]+str('1'))
    # Добавляем перенос строки
    out.write('\n')
inp.close()    
out.close()
print ('Работа завершена. Изменено '+ str(sum(1 for line in open('C:\\out.txt', 'r')))
+ str(' строк'))




1055 INFO: PyInstaller: 3.2.1
1056 INFO: Python: 3.6.1
1057 INFO: Platform: Windows-7-6.1.7601-SP1
1060 INFO: wrote C:\Windows\system32\pr.spec
1063 INFO: UPX is not available.
1066 INFO: Extending PYTHONPATH with paths
['C:\\Users\\User\\Desktop\\Python', 'C:\\Windows\\system32']
1068 INFO: checking Analysis
1068 INFO: Building Analysis because out00-Analysis.toc is non existent
1069 INFO: Initializing module dependency graph...
1077 INFO: Initializing module graph hooks...
1144 INFO: Analyzing base_library.zip ...
Traceback (most recent call last):
  File "C:\Python3\Scripts\pyinstaller-script.py", line 11, in 
    load_entry_point('PyInstaller==3.2.1', 'console_scripts', 'pyinstaller')()
  File "c:\python3\lib\site-packages\PyInstaller\__main__.py", line 90, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "c:\python3\lib\site-packages\PyInstaller\__main__.py", line 46, in run_b
uild
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "c:\python3\lib\site-packages\PyInstaller\building\build_main.py", line 7
88, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'
))
  File "c:\python3\lib\site-packages\PyInstaller\building\build_main.py", line 7
34, in build
    exec(text, spec_namespace)
  File "", line 16, in 
  File "c:\python3\lib\site-packages\PyInstaller\building\build_main.py", line 2
12, in __init__
    self.__postinit__()
  File "c:\python3\lib\site-packages\PyInstaller\building\datastruct.py", line 1
61, in __postinit__
    self.assemble()
  File "c:\python3\lib\site-packages\PyInstaller\building\build_main.py", line 3
17, in assemble
    excludes=self.excludes, user_hook_dirs=self.hookspath)
  File "c:\python3\lib\site-packages\PyInstaller\depend\analysis.py", line 560,
in initialize_modgraph
    graph.import_hook(m)
  File "c:\python3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py"
, line 1509, in import_hook
    source_package, target_module_partname, level)
  File "c:\python3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py"
, line 1661, in _find_head_package
    target_module_headname, target_package_name, source_package)
  File "c:\python3\lib\site-packages\PyInstaller\depend\analysis.py", line 209,
in _safe_import_module
    module_basename, module_name, parent_package)
  File "c:\python3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py"
, line 2077, in _safe_import_module
    module_name, file_handle, pathname, metadata)
  File "c:\python3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py"
, line 2167, in _load_module
    self._scan_code(m, co, co_ast)
  File "c:\python3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py"
, line 2585, in _scan_code
    module, module_code_object, is_scanning_imports=False)
  File "c:\python3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py"
, line 2831, in _scan_bytecode
    global_attr_name = get_operation_arg_name()
  File "c:\python3\lib\site-packages\PyInstaller\lib\modulegraph\modulegraph.py"
, line 2731, in get_operation_arg_name
    return module_code_object.co_names[co_names_index]
IndexError: tuple index out of range

    


Ответы

Ответ 1



Внимание: ответ более не актуален (как и вопрос), ныне Python 3.6 поддерживается. 1055 INFO: PyInstaller: 3.2.1 1056 INFO: Python: 3.6.1 У вас слишком новый Python (для PyInstaller). PyInstaller на момент написания вопроса и этого ответа не поддерживает Python 3.6 и имеет известные проблемы совместимости с ним (тикет про это на GitHub). Самая свежая поддерживаемая версия Python на данный момент — 3.5. Поэтому выбор у вас сейчас (если придерживаться стабильных релизов): использовать другую версию Python отказаться от PyInstaller

Ответ 2



Версия PyInstaller 3.3.dev0 из репозитория собрала Python 3.6 скрипт без IndexError. Для примера, вот Python 3.6 скрипт, который печатает приветствие: #!/usr/bin/env python3 import getpass print(f"Привет, {getpass.getuser()}!") # use Python 3.6 syntax for the test Чтобы поставить PyInstaller из репозитория для python3.6: $ pipsi install --python python3.6 https://github.com/pyinstaller/pyinstaller/archive/develop.zip#egg=pyinstaller Чтобы сгенерировать exe: $ pyinstaller --onefile whoami.py Проверяем: $ dist/whoami Привет, jfs!

Комментариев нет:

Отправить комментарий