【问题标题】:How to install a exe script in python?如何在python中安装exe脚本?
【发布时间】:2021-09-21 12:02:12
【问题描述】:

我正在制作有声读物并收听图像的文本,我尝试使用 tesseract-OCR 并且它有效,但是当我与其他人共享我的应用程序时,我不知道他是否安装了 tesseract-OCR所以我希望当我的脚本启动时它会自动安装 tesseract-OCR 但我将如何做到这一点请有人帮助我。

import os
import tkinter
from tkinter import *
from tkinter import filedialog as fd
import PyPDF2
from pyttsx3 import *
from PyPDF2 import *
from docx import Document
import pytesseract
import cv2
import pyttsx3
from pygame import mixer
from tkinter import messagebox as md

# Setting Up the tkinter window


win = Tk()
win.geometry('550x750')
win.config(background='#d4fffe')
win.title('AudioBook')
icon=PhotoImage(file='audiobook.png')
win.iconphoto(False,icon)
# Set Up Complete

# Setting Up and co

vari=StringVar()

# Setting up complete

# Creating functionality

def select_file():
    global file
    if vari.get() == 'Word Document':
        file=fd.askopenfilename(initialdir='/',filetypes=[('Word FILE','*.docx')])
    elif vari.get()== 'Pdf Document':
        file=fd.askopenfilename(initialdir='/',filetypes=[('PDF FILE','*.pdf')])
    elif vari.get() == 'Image(Indiviual)' :
        file=fd.askopenfilename(initialdir='/',filetypes=[('JPG','*jpg'),('PNG','*png')])
    elif vari.get()=='Text Document':
        file=fd.askopenfilename(initialdir='/',filetypes=[('Text File','*.txt')])
    
    button2.config(state=NORMAL,fg='MidnightBlue')

def check(*args):
    if vari.get():
        button.config(state=NORMAL,fg='MidnightBlue')
    else:
        button.config(state=DISABLED)


def ocr():
    global word,pdfs,image1,txt,text_word,text_img,text_txt,pdf_txt
    word=FALSE
    pdfs=FALSE
    image1=FALSE
    txt=FALSE
    if file:
        if file.endswith('.docx'):
            word=TRUE
        elif file.endswith('.pdf'):
            pdfs=TRUE
        elif file.endswith('.PNG') or file.endswith('.jpg'):
            image1=TRUE
        elif file.endswith('.txt'):
            txt=TRUE

    if word:
        text_word1=[]
        doc=Document(file)
        for par in doc.paragraphs:
            text_word1.append(par.text)

        text_word=''.join(text_word1)
        box.delete('1.0',END)
        box.insert(tkinter.END,text_word)

    elif pdfs:
        try:
            pdf_reader=PyPDF2.PdfFileReader(file)
            for pages in range(pdf_reader.numPages):
                page=pdf_reader.getPage(pages)
                pdf_txt=page.extractText()
                box.delete('1.0',END)
                box.insert(tkinter.END,pdf_txt)
        except:
            box.delete('1.0',END)
            box.insert(tkinter.END,"Text Can't Be Recognised In PDF File Try Image Option")

    elif image1:
        try:
            pytesseract.pytesseract.tesseract_cmd=r'C:/Program Files (x86)/Tesseract- OCR/tesseract.exe'
            img=cv2.imread(file)
            imgf=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
            text_img=pytesseract.image_to_string(imgf)
            box.delete('1.0',END)
            box.insert(tkinter.END,text_img)
        except:
            box.delete('1.0',END)
            box.insert(tkinter.END,"Text Can't be Reconginsed in Image")
    elif txt:
        txt1=open(file,'r')
        text_txt=txt1.read()
        box.delete('1.0',END)
        box.insert(tkinter.END,text_txt)

    button3.config(state=NORMAL,fg='MidnightBlue')

def play():
    direc=os.getcwd()
    new_dir=direc.replace('\\','/')
    mixer.init()
    engine=pyttsx3.init()
    engine.setProperty('rate',165)
    if word:
        if os.path.isfile(new_dir+'/'+'my.wav'):
            engine.save_to_file(text_word,new_dir+'/'+'my2.wav')
            engine.runAndWait()
            mixer.music.unload()
            os.remove(new_dir+'/'+'my.wav')
        elif os.path.isfile(new_dir+'/'+'my2.wav') :
            engine.save_to_file(text_word,new_dir+'/'+'my.wav')
            engine.runAndWait()
            mixer.music.unload()
            os.remove(new_dir+'/'+'my2.wav')
        else:
            engine.save_to_file(text_word,new_dir+'/'+'my.wav')
            engine.runAndWait()
    elif pdfs:
        if os.path.isfile(new_dir+'/'+'my.wav'):
            engine.save_to_file(pdf_txt,new_dir+'/'+'my2.wav')
            engine.runAndWait()
            mixer.music.unload()
            os.remove(new_dir+'/'+'my.wav')
        elif os.path.isfile(new_dir+'/'+'my2.wav'):
            engine.save_to_file(pdf_txt,new_dir+'/'+'my.wav')
            engine.runAndWait()
            mixer.music.unload()
            os.remove(new_dir+'/'+'my2.wav')
        else:
            engine.save_to_file(pdf_txt,new_dir+'/'+'my.wav')
            engine.runAndWait()
    elif image1:
        if os.path.isfile(new_dir+'/'+'my.wav'):

            engine.save_to_file(text_img,new_dir+'/'+'my2.wav')
            engine.runAndWait()
            mixer.music.unload()
            os.remove(new_dir+'/'+'my.wav')
        elif os.path.isfile(new_dir+'/'+'my2.wav'):
            engine.save_to_file(text_img,new_dir+'/'+'my.wav')
            engine.runAndWait()
            mixer.music.unload()
            os.remove(new_dir+'/'+'my2.wav')
        else:
            engine.save_to_file(text_img,new_dir+'/'+'my.wav')
            engine.runAndWait()

    elif txt:
        if os.path.isfile(new_dir+'/'+'my.wav'):

            engine.save_to_file(text_txt,new_dir+'/'+'my2.wav')
            engine.runAndWait()
            mixer.music.unload()
            os.remove(new_dir+'/'+'my.wav')
        elif os.path.isfile(new_dir+'/'+'my2.wav'):
            engine.save_to_file(text_txt,new_dir+'/'+'my.wav')
            engine.runAndWait()
            mixer.music.unload()
            os.remove(new_dir+'/'+'my2.wav')
        else:
            engine.save_to_file(text_txt,new_dir+'/'+'my.wav')
            engine.runAndWait()




    if os.path.isfile(new_dir+'/'+'my.wav'):
        mixer.music.load(new_dir+'/'+'my.wav')
        mixer.music.play()
    else:
        mixer.music.load(new_dir+'/'+'my2.wav')
        mixer.music.play()

    button4.config(state=NORMAL,fg='MidnightBlue')
    button5.config(state=NORMAL,fg='MidnightBlue')
    button6.config(state=NORMAL,fg='MidnightBlue')
    
def pause():
    mixer.music.pause()

def unpause():
    mixer.music.unpause()

def stop():
    mixer.music.stop()
    

# Complete

# Creating widgets
labl1=Label(win,text='Welcome To AudioBook',bg='#d4fffe',font=('Consolas',13,'bold')).place(x=190,y=20)
labl=Label(win,text='Select File Type To Listen Text',bg='#d4fffe',font=('Consolas',13,'bold')).place(x=140,y=60)

drop=OptionMenu(win,vari,'Select File Type ','Word Document','Pdf Document','Image(Indiviual)','Text Document',command=check)

button=Button(win,text='Select File',command=select_file,state=DISABLED,width=15,height=2,bg='LightSkyBlue')

button2=Button(win,text='Extract Text',command=ocr,state=DISABLED,width=15,height=2,bg='LightSkyBlue')

button3=Button(win,text='Listen Text',command=play,state=DISABLED,width=15,height=2,bg='LightSkyBlue')

button4=Button(win,text='Pause',command=pause,state=DISABLED,width=15,height=2,bg='LightSkyBlue')

button5=Button(win,text='Resume',command=unpause,state=DISABLED,width=15,height=2,bg='LightSkyBlue')

button6=Button(win,text='Stop Listening',command=stop,state=DISABLED,width=15,height=2,bg='LightSkyBlue')


box=Text(win,width=60,height=15,font=('consolas',11,'italic'))
#placement

drop.place(x=205,y=120)
button.place(x=208,y=170)
box.place(x=35,y=240)
button2.place(x=110,y=530)
button3.place(x=310,y=530)
button4.place(x=110,y=600)
button5.place(x=310,y=600)
button6.place(x=208,y=670)
#designing

drop.config(width=15,bg='LightSkyBlue',highlightbackground='LightSkyBlue')
button2.config(font=('Consolas',11,'italic'),activebackground='cornsilk')
button.config(font=('Consolas',11,'italic'),activebackground='cornsilk')
button3.config(font=('Consolas',11,'italic'),activebackground='cornsilk')
button4.config(font=('Consolas',11,'italic'),activebackground='cornsilk')
button5.config(font=('Consolas',11,'italic'),activebackground='cornsilk')
button6.config(font=('Consolas',11,'italic'),activebackground='cornsilk')
drop["menu"]["background"] = 'lightskyblue'
drop["menu"]["foreground"] = 'navy'
drop["menu"]["font"] = ('Consolas',11,'italic')
drop['height']= 1

# Creation complete

win.mainloop()


【问题讨论】:

  • 可以使用cython或者Pyinstaller编译代码

标签: python-3.x tkinter


【解决方案1】:

如果您想在程序执行期间运行安装程序,您可以使用安装所需的命令创建一个批处理脚本。然后,您可以使用子进程从 python 调用脚本。我附上了子进程here 的文档。如果您使用的是 Windows 操作系统,则可以调用子进程来执行批处理脚本。如果你有 Linux 发行版,你可以创建一个 shell 脚本并调用子进程。

import subprocess
subprocess.call([r'C:\Users\Test\Desktop\Test\installer.bat'])

您必须正确提供脚本的位置,因为您使用的窗口可以与上述类似。

【讨论】:

    猜你喜欢
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2016-06-24
    • 2015-06-05
    • 1970-01-01
    • 2013-01-18
    • 2013-01-09
    相关资源
    最近更新 更多