Скомпилируйте несколько файлов .py в исполняемый файл Windows (.exe) - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть относительно небольшая программа на Python, которую я хочу преобразовать в исполняемый файл Windows. Первоначально он был написан с Pycharm и работает в нем нормально.

Он состоит из двух .py файлов, которые я написал, и некоторых библиотек (все установлены из pip).

Я пытаюсь выполнить свою работу с помощью cx_Freeze, но без особого успеха. Мой setup.py такой:

from cx_Freeze import setup, Executable
import os.path

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6') 
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

setup(name="MFS-printer",
      version='1.0.0',
      description='A parser for the log file from the terminal exit of the mfs system',
      options={"build_exe": {"packages": ["file_read_backwards", "Pil", "watchdog", "win32print", "win32ui", "tkinter", "log_parser"],
                             "include_files": ["Roboto-Bold.ttf", "mfs_robot(2).png", os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),]
                             }
                },
      executables = [Executable("main.py"), Executable("log_parser.py")], requires=['watchdog']
      )

После запуска python setup.py build для создания приложения windows ошибок не возникает, но при попытке запустить приложение при запуске вылетает с этой ошибкой:

this is after I double click on the executable

Мой импорт из этих двух файлов (main.py и log_parser.py) следующий:

main.py:

import os,time
import datetime
import log_parser

import win32print
from tkinter import filedialog
from tkinter import *

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from pathlib import Path

log_parser.py

import os

import win32print
import win32ui

from file_read_backwards import FileReadBackwards
from PIL import Image, ImageDraw, ImageFont, ImageWin

Возможно, что-то не так с setup.py, но я не могу найти что. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Похоже, что сейчас cx_Freeze не поддерживает Python3.7 для Windows 64bit (до этой даты). Это вопрос Github, который относится к нему. Я надеюсь, что к тому времени, когда кто-то еще будет искать это, оно будет исправлено!

https://github.com/anthony-tuininga/cx_Freeze/issues/399

0 голосов
/ 01 сентября 2018

Возможно, есть лучший ответ, но я бы просто использовал Python Threading. Вы можете объединить оба сценария в один и запускать их одновременно.

Вот пример потока:

from threading import Thread
from time import sleep

def script1():
    while (True):
        print("1")
        sleep(2)

def script2():
    while (True):
        sleep(.1)
        print("2")
        sleep(1.9)

Thread(target = script1).start()
Thread(target = script2).start()

Edit, попробуйте это:

Импортировать все необходимые модули в первый (основной) скрипт. После добавления from [filenameofsecondscript] import * скрипт будет запущен при импорте, поэтому убедитесь, что используются только определения, а не вызовите определение при необходимости. Чем создать новый exe-файл со вторым сценарием, включенным как .py (не exe!).

...