Ldap вызывает cra sh в двоичном формате - PullRequest
0 голосов
/ 14 июля 2020

У меня есть эта простая программа, которая просит пользователя войти в систему, а затем ldap проверяет его учетные данные, чтобы продолжить работу в программе. Однако, как только я добавил ldap и включил его в .exe, любой успешный вход в систему приводил к сбою программы. Я компилирую программу, используя pip install auto-py-to-exe, и выбираю следующие параметры: Onefile, Window Based, а затем я называю результат.

import sys, ldap
from sys import platform
if platform == "win32":
    import win32gui
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt


class LoginForm(QWidget):
    def __init__(self, width, height):
        super().__init__()
        self.setWindowTitle('Login Form')
        self.resize(width / 3, height / 3)

        layout = QGridLayout()

        label_name = QLabel('<font size="4"> Username: </font>')
        self.lineEdit_username = QLineEdit()
        self.lineEdit_username.setPlaceholderText('Please enter '
                                                  'your username')
        layout.addWidget(label_name, 0, 0)
        layout.addWidget(self.lineEdit_username, 0, 1)

        label_password = QLabel('<font size="4"> Password: </font>')
        self.lineEdit_password = QLineEdit()
        self.lineEdit_password.setPlaceholderText('Please enter '
                                                  'your password')
        self.lineEdit_password.setEchoMode(QtWidgets.QLineEdit.Password)
        layout.addWidget(label_password, 1, 0)
        layout.addWidget(self.lineEdit_password, 1, 1)

        button_login = QPushButton('Login')
        button_login.clicked.connect(self.showApp)
        layout.addWidget(button_login, 2, 0, 1, 2)
        layout.setRowMinimumHeight(2, 75)

        self.setLayout(layout)



    def checkPass(self):
        if self.lineEdit_username.text() != '' \
                and self.lineEdit_password.text() != '':
            self.user = self.lineEdit_username.text()
            conn = ldap.initialize('ldap://ldap.com')
            conn.protocol_version = 3
            conn.set_option(ldap.OPT_REFERRALS, 0)
            try:
                result = conn.simple_bind_s(self.user + "@ldap.com",
                                            self.lineEdit_password
                                            .text())
            except ldap.INVALID_CREDENTIALS:
                return "Invalid credentials"
            except ldap.SERVER_DOWN:
                return "Server down"
            except ldap.LDAPError as e:
                if type(e.message) == dict and e.message.has_key('desc'):
                    return "Other LDAP error: " + e.message['desc']
                else:
                    return "Other LDAP error: " + e
            finally:
                conn.unbind_s()
            return 'Success'

    def showApp(self):
        msg = QMessageBox()
        result = self.checkPass()
        if result == 'Success':
            #continue with the program
        else:
            msg.setText(result)
            msg.exec_()

if __name__ == '__main__':
    app = QApplication(sys.argv)

    screenRes = app.desktop().screenGeometry()
    width, height = screenRes.width(), screenRes.height()
    form = LoginForm(width, height)
    form.show()
    if win32gui in sys.modules:
        form.setWindowState(Qt.WindowActive)
    sys.exit(app.exec_())

Есть ли что-то, что мне нужно изменить в моем коде или в моей компиляции метод? Я не могу найти хороший способ отладить это.

Изменить: я начал экранную запись окна отладки, чтобы я мог прочитать его после сбоя, и он говорит: configparser not found in PYZ Я также пробовал сделать --hidden-import=configparser

...