Мой файл .py работает отлично, но когда я превращаю его в .exe, он терпит неудачу.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Мой файл .py работает отлично, но когда я превращаю его в .exe, он терпит неудачу.

Сообщение Anonymous »

Я пытаюсь написать приложение, которое позволит вам одновременно загружать множество видео (или аудио) с Youtube, используя Python, в частности библиотеки tkinter и pytube. Когда я запускаю его как файл .py, все идет идеально. Однако, когда я превращаю его в .exe (с помощью auto-py-to-exe), возникает проблема, хотя все остальное работает, кнопка «Загрузить» абсолютно ничего не делает.
Хочу уточнить, при нажатии кнопки "Скачать" никакой ошибки не выскакивает, просто это не работает.
Вот весь код. п>

Код: Выделить всё

# importing packages
from pytube import YouTube
import tkinter as tk
from tkinter import filedialog, messagebox

WIDTH = "500"
HEIGHT = "300"

dir = ""
url_list = []

root = tk.Tk()
root.geometry(WIDTH + "x" + HEIGHT)
root.resizable(False, True)
root.title("Youtube Downloader")

audio = tk.BooleanVar()
single_song = tk.BooleanVar()

def download(url, dir, audio):
yt = YouTube(url=url)
if audio.get():
video = yt.streams.filter(only_audio=True).first()
else:
video = yt.streams.get_highest_resolution()
video.download(output_path=dir)

if single_song.get():
messagebox.showinfo("Done", yt.title + " has been successfully downloaded.")

def change_value(var):
if var:
var = False
else:
var = True

def get_dir():
global dir
dir = filedialog.askdirectory()

def add(url):
global url_list
url_list.append(url)

def display():
global url_list
for child in frm_disp.winfo_children():
child.destroy()
for url in url_list:
label = tk.Label(frm_disp, text=url)
label.pack()

def clear():
global url_list
url_list = []
for child in frm_disp.winfo_children():
child.destroy()

def download_all(dir, audio):
global url_list
if len(url_list) == 0:
messagebox.showwarning("URL","Please write a URL")
return
if dir == "":
messagebox.showwarning("Directory", "Please select a directory")
return

for url in url_list:
download(url, dir, audio)

messagebox.showinfo("Done", "All songs downloaded correctly")

frm = tk.Frame(root, width=480, height=480)
frm.pack()

lbl = tk.Label(root, text="List of songs to be donwloaded (Press \"Display\" to refresh):", pady=10)
lbl.pack()

frm_disp = tk.Frame(root, width=480, height=100, highlightthickness=2,highlightbackground="black")
frm_disp.pack()

btsingle_song = tk.Checkbutton(root, variable=single_song, text="Warn when each song has been downloaded")
btsingle_song.pack()

guide = tk.Label(frm, text="Write the URL of the Youtube video:")
guide.grid(row=0, column=0, columnspan=3,pady=10)

bturl = tk.Entry(frm, width=75)
bturl.grid(row=1, column=0, columnspan=3)

dwn = tk.Button(frm, command= lambda: download_all(dir, audio), width=15, text="Download")
dwn.grid(row=2, column=1)

btdir = tk.Button(frm, command=get_dir, width=15, text="Directory")
btdir.grid(row=2, column=0)

btadd = tk.Button(frm, command= lambda: add(bturl.get()), width=15, text="Add")
btadd.grid(row=3, column=0)

disp = tk.Button(frm, command=display, width=15, text="Display")
disp.grid(row=3, column=1)

clr = tk.Button(frm, command=clear, width=15, text="Clear")
clr.grid(row=3, column=2)

only_audio = tk.Checkbutton(frm, text="Only audio (as mp3)", variable=audio)
only_audio.grid(row=2, column=2)

root.update()
root.mainloop()

Я пытался прикрепить папки в auto-py-to-exe, чтобы проверить, не связаны ли проблемы с модулями, но это не сработало. Я также пробовал запустить его в виртуальной среде с установленным pytube (поскольку он не установлен на моем компьютере, он установлен в среде окружения), но это тоже не сработало.
Поскольку единственной проблемой является кнопка «Загрузить», я подумал, что, возможно, проблема в pytube, но понятия не имею.
Обновление:
Я сохранил тестирую код, и всякий раз, когда я пытаюсь загрузить видео или аудио, выдается следующая ошибка:

Код: Выделить всё

Traceback (most recent call last):
File "tkinter\__init__.py", line 1892, in __call__
File "DonwloadYoutube.py", line 93, in 
File "DonwloadYoutube.py", line 71, in download_all
File "DonwloadYoutube.py", line 27, in download
File "pytube\__main__.py", line 296, in streams
File "pytube\__main__.py", line 181, in fmt_streams
File "pytube\extract.py", line 409, in apply_signature
File "pytube\cipher.py", line 30, in __init__
File "re.py", line 252, in compile
File "re.py", line 304, in _compile
File "sre_compile.py", line 764, in compile
File "sre_parse.py", line 950, in parse
File "sre_parse.py", line 443, in _parse_sub
File "sre_parse.py", line 668, in _parse
re.error: nothing to repeat at position 2
Я также тестировал исполняемый файл на других машинах, и он тоже выдает эту ошибку, хотя когда я запускаю код, он всегда работает.

Подробнее здесь: https://stackoverflow.com/questions/786 ... e-it-fails
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»