Merhaba "PyCharm" kullanıyorum proje birden fazla .py dosyası .ini dosyasının içersinden çekip sorunsuz çalışıyor. ama auto-py-to-exe ile .exe yapınca hata alıyor. "__future__" modül sorununu bir türlü çözemedim

import sys
import os
import time
import configparser

from PyQt5 import QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtGui import QColor

# Türkçe karakter desteği için ConfigParser sınıfını özelleştirme
class TurkishConfigParser(configparser.ConfigParser):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def optionxform(self, optionstr):
return optionstr # Değişiklik: Küçük harf dönüşümü yapma


class DosyaThread(QThread):
log_degisim_sinyali = pyqtSignal(str)

def __init__(self, dosya_yolu, dosya_adı, dosya_sure, parent=None):
super().__init__(parent)
self.dosya_yolu = dosya_yolu
self.dosya_adı = dosya_adı
self.dosya_sure = dosya_sure
self.calisiyor = False

def run(self):
self.calisiyor = True
self.log_degisim_sinyali.emit(f"{self.dosya_adı} dosyası çalışıyor...")

calisma_dizini = os.path.dirname(self.dosya_yolu)
os.chdir(calisma_dizini)
with open(self.dosya_yolu, "r", encoding="utf-8") as dosya:
kod = dosya.read()
try:
exec(kod, globals()) # Execute code with access to global variables
except Exception as e:
self.log_degisim_sinyali.emit(f"[HATA] Dosya: {self.dosya_adı}\nHata Mesajı: {str(e)}\n")

if self.dosya_sure > 0:
self.log_degisim_sinyali.emit(f"{self.dosya_adı} dosyası {self.dosya_sure} saniye sonra kapatılacak.")
time.sleep(self.dosya_sure)
else:
self.log_degisim_sinyali.emit(f"{self.dosya_adı} dosyası kapatıldı.")

self.calisiyor = False


class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Kontrol Paneli")

self.central_widget = QtWidgets.QWidget()
self.setCentralWidget(self.central_widget)

self.layout = QtWidgets.QVBoxLayout()
self.central_widget.setLayout(self.layout)

self.log_penceresi = QtWidgets.QTextEdit()
self.layout.addWidget(self.log_penceresi)

self.baslat_durdur_butonu = QtWidgets.QPushButton("Başlat")
self.baslat_durdur_butonu.clicked.connect(self.baslat_durdur_toggle)
self.layout.addWidget(self.baslat_durdur_butonu)

self.dosya_threads = []

# Bot ayarlarını okuma
self.bot_ayarlar_dosya = "bot-ayar.ini"
self.ayarlar = TurkishConfigParser()
self.ayarlar.read(self.bot_ayarlar_dosya, encoding="utf-8")

self.aktif_dosya_index = 0
self.is_baslatildi = False

self.baslat_renk = QColor(0, 255, 0) # Yeşil renk
self.durdur_renk = QColor(255, 0, 0) # Kırmızı renk

def baslat_durdur_toggle(self):
if not self.is_baslatildi:
self.baslat_durdur_butonu.setText("Durdur")
self.baslat_durdur_butonu.setStyleSheet(f"background-color: {self.durdur_renk.name()};")
self.is_baslatildi = True
self.baslat_dosya_threads()
else:
self.baslat_durdur_butonu.setText("Başlat")
self.baslat_durdur_butonu.setStyleSheet(f"background-color: {self.baslat_renk.name()};")
self.is_baslatildi = False
self.durdur_dosya_threads()

def baslat_dosya_threads(self):
bolum_numarasi = 1
self.dosya_threads = []
while True:
ayarlar_bolum = "ayarlar" + str(bolum_numarasi)
if ayarlar_bolum not in self.ayarlar:
break

dosya_yolu = self.ayarlar.get(ayarlar_bolum, "url-yol-" + str(bolum_numarasi), fallback=None)
dosya_adı = self.ayarlar.get(ayarlar_bolum, "url-ad-" + str(bolum_numarasi), fallback="")
dosya_sure = self.ayarlar.getint(ayarlar_bolum, "url-sure-" + str(bolum_numarasi), fallback=0)
if dosya_yolu:
dosya_thread = DosyaThread(dosya_yolu, dosya_adı, dosya_sure)
dosya_thread.log_degisim_sinyali.connect(self.loga_yazdir)
self.dosya_threads.append(dosya_thread)

bolum_numarasi += 1

if len(self.dosya_threads) > 0:
self.aktif_dosya_index = 0
self.calistir_siradaki_dosyayi()

def calistir_siradaki_dosyayi(self):
if self.aktif_dosya_index < len(self.dosya_threads):
dosya_thread = self.dosya_threads[self.aktif_dosya_index]
dosya_thread.start()
dosya_thread.finished.connect(self.dosya_thread_tamamlandi)

def dosya_thread_tamamlandi(self):
self.aktif_dosya_index += 1
if self.aktif_dosya_index == len(self.dosya_threads):
self.aktif_dosya_index = 0
if self.is_baslatildi:
self.calistir_siradaki_dosyayi()

def durdur_dosya_threads(self):
for dosya_thread in self.dosya_threads:
dosya_thread.terminate()

def loga_yazdir(self, mesaj):
self.log_penceresi.append(mesaj)

def closeEvent(self, event):
self.durdur_dosya_threads()
super().closeEvent(event)


if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())