Не получается засунуть свой код в exe файл через pyinstaller
У меня есть код, который нормально работает в pycharm, но я его хочу запихнуть в exe. Я использую pyinstaller и когда я пытаюсь сделать pyinstaller filename.py у меня выдаёт Error, покажу на скрине ниже. Код тоже прикреплю ниже Ещё я попробовал запустить код не с pyCharm, а создать файл .py и после после запуска файла он сразу закрывается.В коде присутствует работа с xml и сам эрор связан с 'utf-8'
import xml.etree.ElementTree as ET
from xml.dom import minidom
name = input('Введите полный нейм БС:')
MRBTS = input('Введите MRBTS БС:')
Cells1800 = input('Введите перечень Сот 1800 (через запятую):')
Cells2600 = input('Введите перечень Сот 2600 (через запятую):')
Cells1800 = tuple(int(x) for x in Cells1800.split(","))
Cells2600 = tuple(int(x) for x in Cells2600.split(","))
CAREL = {'class': "CAREL"}
strDistName1 = 'PLMN-PLMN/MRBTS-' + str(MRBTS) + '/LNBTS-' + str(MRBTS) + '/LNCEL-' + str(Cells1800) + '/CAREL-1'
strDistName2 = 'PLMN-PLMN/MRBTS-' + str(MRBTS) + '/LNBTS-' + str(MRBTS) + '/LNCEL-' + str(Cells2600) + '/CAREL-1'
#import pylab as p
def main():
new = ET.Element('raml', version = '2.0', xmlns='raml20.xsd')
cmData = ET.SubElement(new, 'cmData', xmlns="", type='plan', scope='changes', name='KIE_KIE_NV9_DUL_1')
header = ET.SubElement(new, 'header')
log = ET.SubElement(header, 'log', dateTime='29.09.2021', action="created", appInfo="PlanExporter")
log.text = 'InternalValues are used'
x = 0
x1 = 0
NCarel = 1
while x < len(Cells1800):
while x1 <len(Cells2600):
managedObject = ET.SubElement(cmData, 'managedObject', CAREL,version="xL20B_2003_002", distName='PLMN-PLMN/MRBTS-' + str(MRBTS) + '/LNBTS-' + str(MRBTS) + '/LNCEL-' + str(Cells1800[x]) + '/CAREL-' + str(NCarel) , operation="create")
defaults = ET.SubElement(managedObject, 'defaults',name="System")
p1 = ET.SubElement(managedObject, 'p', name="lcrId")
p1.text = str(Cells2600[x1])
p1 = ET.SubElement(managedObject, 'p', name="lnBtsId")
p1.text = str(MRBTS)
p1 = ET.SubElement(managedObject, 'p', name="maxNumOfSuppMimoLayer")
p1.text = '2'
p1 = ET.SubElement(managedObject, 'p', name="pcellSwapAllowed")
p1.text = '1'
x1 += 1
NCarel += 1
NCarel = 1
x1 = 0
x += 1
x = 0
x1 = 0
while x < len(Cells2600):
while x1 <len(Cells1800):
managedObject = ET.SubElement(cmData, 'managedObject',version="xL20B_2003_002", distName='PLMN-PLMN/MRBTS-' + str(MRBTS) + '/LNBTS-' + str(MRBTS) + '/LNCEL-' + str(Cells2600[x]) + '/CAREL-' + str(NCarel) , ooperation="create")
defaults = ET.SubElement(managedObject, 'defaults',name="System")
p1 = ET.SubElement(managedObject, 'p', name="lcrId")
p1.text = str(Cells1800[x1])
p1 = ET.SubElement(managedObject, 'p', name="lnBtsId")
p1.text = str(MRBTS)
p1 = ET.SubElement(managedObject, 'p', name="maxNumOfSuppMimoLayer")
p1.text = '2'
p1 = ET.SubElement(managedObject, 'p', name="pcellSwapAllowed")
p1.text = '1'
x1 += 1
NCarel += 1
NCarel = 1
x1 = 0
x += 1
managedObject = ET.SubElement(cmData, 'managedObject', version="xL20B_2003_002",distName='PLMN-PLMN/MRBTS-' + str(MRBTS) + '/LNBTS-' + str(MRBTS) + '/CADPR-0', id="41429697", operation="create")
defaults = ET.SubElement(managedObject, 'defaults', name="System")
p1 = ET.SubElement(managedObject, 'p', name='a3Offset')
p1.text = '-6'
p1 = ET.SubElement(managedObject, 'p', name='a3TimeToTrigger')
p1.text = '320'
p1 = ET.SubElement(managedObject, 'p', name='a3TriggerQuantity')
p1.text = '0'
p1 = ET.SubElement(managedObject, 'p', name='a6Offset')
p1.text = '6'
p1 = ET.SubElement(managedObject, 'p', name='a6ReportInterval')
p1.text = '640'
p1 = ET.SubElement(managedObject, 'p', name='a6TimeToTrigger')
p1.text = '8'
p1 = ET.SubElement(managedObject, 'p', name='enableA3Event')
p1.text = '1'
p1 = ET.SubElement(managedObject, 'p', name='enableA6Event')
p1.text = '1'
p1 = ET.SubElement(managedObject, 'p', name='enableFreqPrioSwap')
p1.text = '0'
p1 = ET.SubElement(managedObject, 'p', name='hysA3Offset')
p1.text = '2'
p1 = ET.SubElement(managedObject, 'p', name='hysA6Offset')
p1.text = '0'
p1 = ET.SubElement(managedObject, 'p', name='maxNumMimoLayerFdd')
p1.text = '10'
p1 = ET.SubElement(managedObject, 'p', name='maxNumScellSwaps')
p1.text = '0'
p1 = ET.SubElement(managedObject, 'p', name='sFreqPrio')
p1.text = '1'
p1 = ET.SubElement(managedObject, 'p', name='scellMeasThreshRsrp')
p1.text = '-110'
p1 = ET.SubElement(managedObject, 'p', name='scellMeasThreshRsrq')
p1.text = '-120'
p1 = ET.SubElement(managedObject, 'p', name='scellPdcchOlLa')
p1.text = '2'
save_xml('test.xml', new)
def save_xml(NSNTEST, xml_code):
xml_string = ET.tostring(xml_code).decode()
xml_prettyxml = minidom.parseString(xml_string).toprettyxml()
with open('C:\Pyton\File for open\MyXml.xml', 'w') as xml_file:
xml_file.write(xml_prettyxml)
if __name__ == '__main__':
main()
Ответы (2 шт):
Похоже подобный вопрос задавали на анлоязычной версии форума
Рещением там было добавить флаг игнорирования ошибки декодирования в файл Python\Lib\site-packages\Pyinstaller\compat.py
.decode() => .decode(errors='ignore') или .decode(errors="replace")
Но обязательно проверьте на вашем варианте данных - игнорирование ошибок может дать некорректный результат
возможно имеет смысл добавить в самом начале это:
# -*- coding: cp1251 -*-
где указана кодировка файла.
