• 13-07-2023, 17:59:41
    #1
    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_())
  • 13-07-2023, 19:44:48
    #2
    modulude göstermen gerekiyor
  • 13-07-2023, 22:31:52
    #3
    Çalıştırdığı .py projesi

    import requests
    from lxml import html
    import mysql.connector
    from mysql.connector import Error
    from configparser import ConfigParser
    from datetime import datetime
    import os
    from bs4 import BeautifulSoup