# -*- coding: utf-8 -*- # 音·创 开发交流群 861684859 # Email EillesWan2006@163.com W-YI_DoctorYI@outlook.com EillesWan@outlook.com # 版权所有 金羿("Eilles Wan") & 诸葛亮与八卦阵("bgArray") & 鸣凤鸽子("MingFengPigeon") # 若需转载或借鉴 许可声明请查看仓库目录下的 Lisence.md """ 音·创启动器 (Musicreater Launcher) 对音·创的自动安装以及相应版本选择提供支持的工具 Musicreater Launcher (音·创启动器) A tool that used for installing Musicreater automatically Copyright 2023 all the developers of Musicreater 开源相关声明请见 ./Lisence.md Terms & Conditions: ./Lisence.md """ # 下面为正文 import os import shutil import threading import time import urllib.request from platform import architecture from sys import platform from git import Repo def downloadPython(): if os.system('python -V'): print('\033[7m{}\033[0m'.format("正在下载python\nDownloading Python")) try: urllib.request.urlretrieve( "https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe" if architecture()[0] == "32bit" else "https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe", "./pythonInstaller.exe", ) except Exception as E: input(str(E) + "\n自动下载失败,按下回车取消 | Download failed, press enter to cancel") exit() print('正在安装python\nInstalling Python') os.system( f'.\\pythonInstaller.exe /passive InstallAllUsers=1 AssociateFiles=1 CompileAll=1 PrependPath=1 Shortcuts=1 Include_doc=0 Include_exe=1 Include_pip=1 Include_lib=1 Include_tcltk=1 Include_launcher=1 InstallLauncherAllUsers=1 Include_test=0 Include_tools=0' ) os.remove('./pythonInstaller.exe') def downloadPkgVer(): Repo.clone_from( 'https://gitee.com/EillesWan/Musicreater.git', './MusictraterPkgver', branch='pkgver', ) def installLibraries( libraries: list, indexs: str = 'https://pypi.tuna.tsinghua.edu.cn/simple' ): """安装全部开发用库""" if platform == 'win32': for i in libraries: print("安装库 | Installing Librory:" + i) os.system(f"python -m pip install {i} -i {indexs}") elif platform == 'linux': os.system("sudo apt-get install python3-pip") for i in libraries: print("安装库 | Installing Librory:" + i) os.system(f"sudo python3 -m pip install {i} -i {indexs}") def __mian__(): if platform == 'win32': import wx # 主窗口类 class MainFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__( self, id=wx.ID_ANY, parent=parent, title=title, size=(350, 200) ) self.buttonMainVer = wx.Button( self, -1, "音·创主版本\nMSCT main", pos=(50, 20), size=(100, 50) ) self.button_pkgver = wx.Button( self, -1, "音·创库版本\nPkgver", pos=(180, 20), size=(100, 50) ) self.Bind(wx.EVT_BUTTON, self.mainVer, self.buttonMainVer) self.buttonMainVer.SetDefault() self.Bind(wx.EVT_BUTTON, self.pkgVer, self.button_pkgver) self.button_pkgver.SetDefault() self.textlabel = wx.StaticText(self, -1, "就绪\nReady", pos=(50, 100)) self.Show(True) def mainVer(self, event): wx.MessageBox( "音·创主版本尚在开发过程中,敬请期待!\nThe main version of Musicreater is now developing, please stay tuned...", "提示 | Tips", wx.OK | wx.ICON_INFORMATION, ) def pkgVer(self, event): wx.MessageBox( "音·创库版本是一项支持库,本程序仅提供下载,具体使用请见下载后的文件,谢谢!\nThis program is only available for download of pkgver, please see the downloaded file for specific use, thank you!", "提示 | Tips", wx.OK | wx.ICON_INFORMATION, ) self.textlabel.SetLabel("正在检测Python环境\nChecking Python environment") time.sleep(1) downloadPython() self.textlabel.SetLabel("正在下载音·创库版本\nChecking Musicreater Pkgver") time.sleep(1) downloadPkgVer() self.textlabel.SetLabel("正在安装所需依赖库\nInstalling required libraries") time.sleep(1) installLibraries( [ 'brotli', 'mido', ] ) self.textlabel.SetLabel("完成!\nOK!") time.sleep(1) os.remove('./MusictraterPkgver/.gitignore') shutil.rmtree('./MusictraterPkgver/.git') self.Show(False) self.Destroy() exit() app = wx.App(False) frame = MainFrame(None, "音·创 启动器 | MSCT Launcher") app.MainLoop() elif platform == 'linux': pass if __name__ == '__main__': __mian__()