Приложение Python 3.7 перестает подключаться к Интернету, когда я использую cx_Freeze, чтобы превратить приложение в исполняемый файл - PullRequest
1 голос
/ 15 июня 2019

Я пытаюсь создать приложение на python, которое будет проверять наличие новых версий на GitHub.Он проверяет, находя txt-файл в хранилище, в котором указан номер последней версии.Мой код работает нормально и делает то, что я хочу, когда запускаю его с PyCharm, но когда я использую cx_Freeze и запускаю exe, у него возникают проблемы.

Я начал с использования запросов, которые работали нормально до замораживания, затем я переключился на urllib3, который имел тот же результат.Я попытался просто пропинговать Google, который работал после замораживания, так что я знаю, что это не проблема с подключением к Интернету.

from urllib3 import PoolManager
version_url = "https://raw.githubusercontent.com/redscientific/CompanionApp/master/Version.txt"
def get_data():
    mgr = PoolManager()
    r = mgr.request("GET", version_url)
    ...then I parse the data etc.

Перед тем, как замораживать его, я получаю нужные мне результаты, но после замораживания это, кажется, имеетпроблема в r = mgr.request("GET", version_url)

Я не знаю, с какой ошибкой это связано, потому что я не знаю, как вернуть ошибки из .exe, кроме печати строк в файл, но не получит ни одногострок после mgr.request(), поэтому я не могу ничего вывести после возникновения ошибки.

Наверное, мой вопрос: как мне заставить его работать после того, как я его заморозил?

Ошибка, которую он выплевываетвыход выглядит следующим образом:

urllib3.exceptions.SSLError: Невозможно подключиться к URL-адресу HTTPS, поскольку модуль SSL недоступен.

Очевидно, cx_Freeze автоматически не добавляет пару обязательных .dll файлов.Исправление, которое я обнаружил при большем поиске, описано здесь .

1 Ответ

0 голосов
/ 15 июня 2019

Попробуйте запустить exe-файл из cmd приглашения или терминала, вы должны увидеть сообщение об ошибке в окне терминала.

Если вы по-прежнему предпочитаете печатать исключение в файл из приложения, вы можете использовать блок try ... except, чтобы перехватить исключение, а затем traceback.print_exc(), чтобы распечатать исключение, см. Как напечатать полный трассировку без остановки программы?

Предполагая, что строка r = mgr.request("GET", version_url) вызывает исключение, замените ее на:

import traceback
try:
    r = mgr.request("GET", version_url)
except Exception:
    with open('logfile.txt', 'w') as f:
        traceback.print_exc(file=f)
...