Функция Python winshell.shortcut не работает должным образом в файле Exe ⇐ Python
-
Гость
Функция Python winshell.shortcut не работает должным образом в файле Exe
-- Python 3.11.5, PyQt5 5.15.9, winshell 0.6
Привет. В настоящее время я работаю над созданием exe-файла с помощью Pyqt5, Pyinstaller.
Теперь у меня возникла проблема с созданием файла ярлыка.
Мой скрипт отлично работает при инициализации через pycharm, в то время как он останавливается без каких-либо сообщений об ошибках при запуске с использованием exe-файла, созданного pyinstaller. Точнее, работа exe-файла останавливается, если целевая папка находится на сервере. Ниже приведены случаи, которые могут быть рассмотрены. Пожалуйста, помогите решить эту проблему.
Случай 1: целевой путь (локальный), короткий путь (серверный) — работает хорошо
введите здесь описание изображения
Случай 2: целевой путь (сервер), ярлык пути (сервер) — останавливается на «shortcut = ws.shortcut(target_path)»
введите здесь описание изображения
Случай 3: Целевой путь (сервер), Ярлык пути (локальный) — останавливается на «shortcut = ws.shortcut(target_path)»
введите здесь описание изображения
Вот мой тестовый скрипт
импортировать систему импортировать ОС из импорта PyQt5.QtWidgets * из импорта PyQt5.QtCore * импортировать WinShell как ws def my_Exception_hook (exctype, значение, обратная трассировка): print (exctype, значение, обратная трассировка) sys._Exceptionhook (тип exctype, значение, обратная трассировка) sys._Exceptionhook = sys.excepthook sys.excepthook = my_Exceptionhook класс TEST_UI (QWidget): send_instance_signal = pyqtSignal('PyQt_PyObject') защита __init__(сам): супер().__init__() self.setupUI() защита setupUI (сам): self.setGeometry(200, 200, 200, 200) self.setWindowTitle('☆TEST☆') self.folder_Path_test = QLabel('\\\\10.10.10.11\\') self.folder_Path_test.setStyleSheet('шрифт: 12 пикселей; цвет: зеленый;') self.folder_Path_test.setMaximumWidth(600) self.folder_Path_test.setWordWrap(True) self.btn_test_path = QPushButton('Целевой путь') self.btn_test_path.clicked.connect(self.btn_test_path_change) self.rcv_folder_test = QLabel('\\\\10.10.10.11\\') self.rcv_folder_test.setStyleSheet('шрифт: 12 пикселей; цвет: зеленый;') self.rcv_folder_test.setMaximumWidth(600) self.rcv_folder_test.setWordWrap(True) self.btn_test_rcv_folder_path = QPushButton('Ярлык путь') self.btn_test_rcv_folder_path.clicked.connect(self.btn_test_path_change2) self.generate_shortcut_btn = QPushButton('Выполнить') self.generate_shortcut_btn.clicked.connect(self.generate_shortcut) vbox = QVBoxLayout() vbox.addWidget(self.folder_Path_test) vbox.addWidget(self.btn_test_path) vbox.addWidget(self.rcv_folder_test) vbox.addWidget(self.btn_test_rcv_folder_path) vbox.addWidget(self.generate_shortcut_btn) self.setLayout(vbox) self.setMinimumSize(self.sizeHint()) себя.шоу() защита btn_test_path_change (сам): folder_directory = QFileDialog.getExistingDirectory(self, 'Выбрать папку', каталог=(os.path.expanduser('~')+"\\Desktop")) self.folder_Path_test.setText(folder_directory.replace('/', '\\')) защита btn_test_path_change2 (сам): folder_directory = QFileDialog.getExistingDirectory(self, 'Выбрать папку', каталог=(os.path.expanduser('~')+"\\Desktop")) self.rcv_folder_test.setText(folder_directory.replace('/', '\\')) защита генерировать_shortcut (сам): def Generate_SC (target_path, ярлык_путь, имя_файла): печать("1") пытаться: если os.path.exists(target_path): печать("2") печать (target_path) печать (ярлык_путь) печать (имя_файла) ярлык = ws.shortcut(target_path) печать("3") Shortcut.write(os.path.join(shortcut_path, file_name)) печать("4") кроме OSError как e: распечатать(е) a=self.folder_Path_test.text() b=self.rcv_folder_test.text() c='test.lnk' Generate_SC(a,b,c) если имя == 'основной': приложение = QApplication(sys.argv) пример = TEST_UI() sys.exit(app.exec_()) Я просто хочу, чтобы мой exe-файл работал хорошо, кто бы его ни использовал
-- Python 3.11.5, PyQt5 5.15.9, winshell 0.6
Привет. В настоящее время я работаю над созданием exe-файла с помощью Pyqt5, Pyinstaller.
Теперь у меня возникла проблема с созданием файла ярлыка.
Мой скрипт отлично работает при инициализации через pycharm, в то время как он останавливается без каких-либо сообщений об ошибках при запуске с использованием exe-файла, созданного pyinstaller. Точнее, работа exe-файла останавливается, если целевая папка находится на сервере. Ниже приведены случаи, которые могут быть рассмотрены. Пожалуйста, помогите решить эту проблему.
Случай 1: целевой путь (локальный), короткий путь (серверный) — работает хорошо
введите здесь описание изображения
Случай 2: целевой путь (сервер), ярлык пути (сервер) — останавливается на «shortcut = ws.shortcut(target_path)»
введите здесь описание изображения
Случай 3: Целевой путь (сервер), Ярлык пути (локальный) — останавливается на «shortcut = ws.shortcut(target_path)»
введите здесь описание изображения
Вот мой тестовый скрипт
импортировать систему импортировать ОС из импорта PyQt5.QtWidgets * из импорта PyQt5.QtCore * импортировать WinShell как ws def my_Exception_hook (exctype, значение, обратная трассировка): print (exctype, значение, обратная трассировка) sys._Exceptionhook (тип exctype, значение, обратная трассировка) sys._Exceptionhook = sys.excepthook sys.excepthook = my_Exceptionhook класс TEST_UI (QWidget): send_instance_signal = pyqtSignal('PyQt_PyObject') защита __init__(сам): супер().__init__() self.setupUI() защита setupUI (сам): self.setGeometry(200, 200, 200, 200) self.setWindowTitle('☆TEST☆') self.folder_Path_test = QLabel('\\\\10.10.10.11\\') self.folder_Path_test.setStyleSheet('шрифт: 12 пикселей; цвет: зеленый;') self.folder_Path_test.setMaximumWidth(600) self.folder_Path_test.setWordWrap(True) self.btn_test_path = QPushButton('Целевой путь') self.btn_test_path.clicked.connect(self.btn_test_path_change) self.rcv_folder_test = QLabel('\\\\10.10.10.11\\') self.rcv_folder_test.setStyleSheet('шрифт: 12 пикселей; цвет: зеленый;') self.rcv_folder_test.setMaximumWidth(600) self.rcv_folder_test.setWordWrap(True) self.btn_test_rcv_folder_path = QPushButton('Ярлык путь') self.btn_test_rcv_folder_path.clicked.connect(self.btn_test_path_change2) self.generate_shortcut_btn = QPushButton('Выполнить') self.generate_shortcut_btn.clicked.connect(self.generate_shortcut) vbox = QVBoxLayout() vbox.addWidget(self.folder_Path_test) vbox.addWidget(self.btn_test_path) vbox.addWidget(self.rcv_folder_test) vbox.addWidget(self.btn_test_rcv_folder_path) vbox.addWidget(self.generate_shortcut_btn) self.setLayout(vbox) self.setMinimumSize(self.sizeHint()) себя.шоу() защита btn_test_path_change (сам): folder_directory = QFileDialog.getExistingDirectory(self, 'Выбрать папку', каталог=(os.path.expanduser('~')+"\\Desktop")) self.folder_Path_test.setText(folder_directory.replace('/', '\\')) защита btn_test_path_change2 (сам): folder_directory = QFileDialog.getExistingDirectory(self, 'Выбрать папку', каталог=(os.path.expanduser('~')+"\\Desktop")) self.rcv_folder_test.setText(folder_directory.replace('/', '\\')) защита генерировать_shortcut (сам): def Generate_SC (target_path, ярлык_путь, имя_файла): печать("1") пытаться: если os.path.exists(target_path): печать("2") печать (target_path) печать (ярлык_путь) печать (имя_файла) ярлык = ws.shortcut(target_path) печать("3") Shortcut.write(os.path.join(shortcut_path, file_name)) печать("4") кроме OSError как e: распечатать(е) a=self.folder_Path_test.text() b=self.rcv_folder_test.text() c='test.lnk' Generate_SC(a,b,c) если имя == 'основной': приложение = QApplication(sys.argv) пример = TEST_UI() sys.exit(app.exec_()) Я просто хочу, чтобы мой exe-файл работал хорошо, кто бы его ни использовал
Мобильная версия