From 8fe373ffe220309547645771b2245a4596e83e17 Mon Sep 17 00:00:00 2001 From: Kevin Dorner Date: Thu, 4 Mar 2021 17:14:03 +0100 Subject: [PATCH] initial commit --- .gitignore | 2 ++ Makefile | 31 +++++++++++++++++++ control | 37 +++++++++++++++++++++++ install.ins | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++ logo.png | Bin 0 -> 7283 bytes remove.ins | 31 +++++++++++++++++++ 6 files changed, 186 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 control create mode 100644 install.ins create mode 100644 logo.png create mode 100644 remove.ins diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa015d5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.exe +/data/ \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bb3873c --- /dev/null +++ b/Makefile @@ -0,0 +1,31 @@ +#Config +UPSTREAM_VERSION = 3.9.2 +PKG_SUB_RELEASE = 1.0 +PKG_FULL_VERSION = ${UPSTREAM_VERSION}-${PKG_SUB_RELEASE} + +SOURCE = https://www.python.org/ftp/python/${UPSTREAM_VERSION}/python-${UPSTREAM_VERSION}-amd64.exe +CHECKSUM = efb20aa1b648a2baddd949c142d6eb06 +## Download Link and Checksums can be found on https://www.python.org/downloads/windows/ + +all: clean install + +install: setversion + @[ -d "./data/" ] || mkdir ./data/ + @echo "INFO: Downloading the Git for Windows executable..." + @wget -O ./data/python-${UPSTREAM_VERSION}-amd64.exe ${SOURCE} + @echo "${CHECKSUM} ./data/python-${UPSTREAM_VERSION}-amd64.exe" | md5sum -c && echo "SUCCESS: Checksums match" || { ec=$$?; echo "ERROR: Checksum mismatch" >&2; rm -rf ./data/ >&2; exit $$ec; } + @echo "SUCCESS: Installed Successfully" + +clean: + @echo "INFO: Cleaning ./data/" + @rm -rf ./data/ + @[ ! -d "./data/" ] && echo "SUCCESS: Cleaned" + +setversion: + @echo "INFO: Writing version ${PKG_FULL_VERSION} to control file" + @sed -i "s/^version: [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$$/version: ${UPSTREAM_VERSION}/" ./control + @sed -i "s/^packageVersion: [0-9]\{1,3\}\.[0-9]\{1,3\}$$/packageVersion: ${PKG_SUB_RELEASE}/" ./control +package: + @echo "MEEP!" +.PHONY: all install clean setversion package + diff --git a/control b/control new file mode 100644 index 0000000..fb81a96 --- /dev/null +++ b/control @@ -0,0 +1,37 @@ +[Product] +type: localboot +id: mdg-python +name: MDG Python +description: Python für Microsoft Windows mit pip-Unterstützung +advice: Vereinfachtes Paket mit neuer Python-Version und funktionsfähiger pip-Unterstützung +version: 3.9.2 +packageVersion: 1.0 +setupScript: install.ins +uninstallScript: remove.ins + +[ProductProperty] +name: shortcut +type: bool +description: Startmenü Verknüpfungen erstellen +default: True + +[ProductProperty] +name: associatefiles +type: bool +description: Assoziere Python-Dateiendungen +helptext: Zu den Python-Dateiendungen gehören u. a. ".py", ".pyw", ".pyc". Doppelklick auf Python-Dateien im Windows-Explorer nutzt dann den Python-Launcher. +default: True + +[ProductProperty] +name: prependpath +type: bool +description: Python zum PATH hinzufügen +helptext: Fügt Python selbst und zugehörige Skripte zum systemweiten PATH hinzu. Dies erlaubt das direkte Verwenden von Python-Werkzeugen in der Kommandozeile. +default: True + +[ProductProperty] +name: pippackages +type: unicode +description: Installiere pip Pakete +helptext: Die Pakete werden mit jeder Installation des Programms installiert oder aktualisiert. Zum Hinzufügen von neuen Pakten kann einfach eine Neuinstallation vorgenommen werden. Die Pakete werden mit einem Leerzeichen getrennt und können auf https://pypi.org/ gefunden werden. Diese Pakete werden systemweit installiert. Durch Nutzer installierte Pakete werden im jeweiligen Appdata Verzeichnis installiert. +pattern: numpy scikit-learn rsa \ No newline at end of file diff --git a/install.ins b/install.ins new file mode 100644 index 0000000..3342bda --- /dev/null +++ b/install.ins @@ -0,0 +1,85 @@ +[Initial] +Message=Installiere Python... +DefVar $Version$ +DefVar $ExitCode$ +DefVar $AssociateFiles$ +DefVar $AssociateFilesArguments$ +DefVar $CreateShortcut$ +DefVar $ShortcutArgument$ +DefVar $PrependPath$ +DefVar $PrependPathArgument$ +DefVar $PackageList$ + +[Aktionen] +ShowBitmap "%ScriptPath%\logo.png" "MDG Python" +Sub_GetProperties +Sub_ConfigureProperties +WinBatch_Uninstall +Files_Cleanup +WinBatch_Setup +WinBatch_UpdatePip +Sub_CheckPackages +Sub_HandleExitCode + +[Sub_GetProperties] +Set $Version$ = GetValue("productversion", GetProductMap) +Set $AssociateFiles$ = GetProductProperty("associatefiles", "true") +Set $CreateShortcut$ = GetProductProperty("shortcut", "true") +Set $PrependPath$ = GetProductProperty("prependpath", "true") +Set $PackageList$ = GetProductProperty("pippackages", "") + +[Sub_ConfigureProperties] +if ($AssociateFiles$ = "true") + Set $AssociateFilesArguments$ = "AssociateFiles=1" +else + Set $AssociateFilesArguments$ = "AssociateFiles=0" +endif + +if ($CreateShortcut$ = "true") + Set $ShortcutArgument$ = "Shortcuts=1" +else + Set $ShortcutArgument$ = "Shortcuts=0" +endif + +if ($PrependPath$ = "true") + Set $PrependPathArgument$ = "PrependPath=1" +else + Set $PrependPathArgument$ = "PrependPath=0" +endif + +[WinBatch_Uninstall] +; First uninstall Python due to an upstream issue with the installer on existing installations: https://bugs.python.org/issue41800 +"%ScriptPath%\data\python-$Version$-amd64.exe" /quiet /uninstall + +[Files_Cleanup] +; This ensures all data has been removed +delete -sf "%ProgramFiles64Dir%\python39\" + +[WinBatch_Setup] +; https://docs.python.org/3/using/windows.html#installing-without-ui +"%ScriptPath%\data\python-$Version$-amd64.exe" /passive InstallAllUsers=1 InstallLauncherAllUsers=1 $AssociateFilesArguments$ $ShortcutArgument$ $PrependPathArgument$ /log "%opsiLogDir%\python-install.log" + +[WinBatch_UpdatePip] +"%ProgramFiles64Dir%\python39\python.exe" -m pip install --upgrade pip + +[Sub_CheckPackages] +if not($PackageList$ = "") + WinBatch_Packages +endif + +[WinBatch_Packages] +"%ProgramFiles64Dir%\python39\Scripts\pip.exe" install -U $PackageList$ + +[Sub_HandleExitCode] +; check return code +Set $ExitCode$ = GetLastExitCode +comment "GetLastExitCode: " + $ExitCode$ +if not($ExitCode$ = "0" or $ExitCode$ = "3010" or $ExitCode$ = "2359302" or $ExitCode$ = "2359297") + ; 0 ERROR_SUCCESS + ; 3010 ERROR_SUCCESS_REBOOT_REQUIRED + ; List of WUSA ExitCodes: https://support.microsoft.com/en-us/kb/938205 + ; 2359297 (WUSA ExitCode, Hex: 0x240001) WU_S_SERVICE_STOP + ; 2359302 (WUSA ExitCode, Hex: 0x00240006) WU_S_ALREADY_INSTALLED + LogError "Fatal: setup returned exit code " + $ExitCode$ + IsFatalError +endif diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5d8ed354a3a73e43161453cf17dcf656db6ec8 GIT binary patch literal 7283 zcmV-(9E{_MP)005u}1^@s6i_d2*00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-vS#DJ01xC_KyGn8~{l~ zK~#9!?cIBnU1gc)@$d8QU8gRoB;;xcNVv!?LW1NniHZ?10yZkPO=bjzkx_88TULAN zb{u&aUitt*lh-I<@OP`~95v^6YoNuW_cPmKL|<@P*U-lu5IKjAqHXnZOJ= zW}9p#UQ-R5?9ER$vj!9ONDVkkA-U{HH0YG_WPnaX9f(fBDe%Y5I4-G87QAWVP1Jov znbaHVazM*p^W}Dee&`e-5m>UXf z(D%x5Y~c5Ke-85Upp(E6#2bi%GVR59S>|_i`)IFaqNCfk?rvwp>P!MK&gqu5!NLpc z-dYD&I@8r=!4lywF)d0jNkW`L?DlBA%>N>Nh$o->;q9jq zfHjhqeD$Fj_{rBf7knJ!I-uEX;QNXvzML9epA+`#Q#jW_e42 zaPExy+syc{W>#McK1rRx(-Hg>^fQmG12!WLNK6H$^bK5Mj&I=jOtNUk)vKO7wE3r} z<509=95T7+;$XJqZ*=A+6~m`&6}MB~|0pfiZvFe`{|Kx5`bG0Ux3;-)l6#LscLFyV zu6|x50uLGYkQ!4KG2J{H0JLzLreBs=6+wbR%qz_n$B!4+(Q;YZcbR4gLJlawJ z(5^C<{uRP_c{B8al|Lc4vcMa9pM$pAf#fsv^hxiC5(2T^NN14>wyn; zm2%qFSJ;8q&w$Q}fN#JT(?fAh0*ds40+5{5TE4n?0Wj%Rb`F-j{Ed}iPt6$J}@&wI@dKdpPc}#NFUItSddx5 z%jnEg%K2;8wC^_5RUSUoEWW<)9aCJ&O-TS&s1Yu9ha-DWm>K2X323Bg3ewc_@KM|N zvj2tVEl2=Xq6s!rA$&cvM9lCD7tXDlT+X?J`t)ToyJ&*p!=#K9WfFiDYlidV8$fkg zkjh+H>M0l9^fmPjuIVbxYgdexsqUfG(bR_>}E8 z#~{VxR-89v2*Zj_sWNO5=+4kIck!2h@~`IoMvrgnP7$R}`vw=*pO0~!&~1iYnw?oQ z(eTA5g|W(QiSzl)Xu$Dd!(D?5_67L;4H2iUj+uga24|aD!^EulNC1vW6vly-F_|1|zy6z_~j2`Vjl50_~(Ju5= zWFmF0(`SOF(4u?Had%DOi%~@w3xM11`{*&?Sgqx2(OnNVsd3WL+QXLwqR+5Yi}>P! zFih}N+G1_je0p+OBU9=}HdQ~>nC9X~yDK@_H32yKAyR(_vF7j%z89j`ZffFWbSto6 z_}lQs`oI}7(NT7+JfQ8oO4R)_3pN}u8{KfHVgTp2tWBlbm`ZbMRv?}4BArLzW|-7y zCi6uLvDoO%moU2X#gD0+-z`=^3X$FoR%7_`1fq|3Hez*uf^#Azs-c5O zMqPvjqI`&;Z3&}o1b1u>~nBB^x z$&YE!RC+j11t zkk`oa{Cwbr%=4N;e_OrBa-4Tifmq@E)f&EHvk_D(T;Mv)@ihFg{hHa$`R>}gn^h-a#z}H3p$zgW@7x%5voZzcbeCg6dNaf(mdE5** z3;Ej!!4*Z=L3APByUaWiIhg)*7oixWPL4Zi+?oddg`6ra)7<+DcwaKV57`308Y zE6%vtj0E2qg^y9->uZiv$Zo?m+^Hv*HI@Z%!I!>2sX@BknSBfreDT6p08`2MG&+3! z&2cm0<4kIJXXyZ2T3jk@{;0|BHsh?)@F~GpQ}}%DIAF!_Q5;|I`!t)6*(z;WaaKtH z7oEKFlEB#=pgE=EBf(eGHD5_1kTUS8Ge=5(7gYfSLP6`v}PPvzpvS*Gu#zG-n@ zfXn`JZKDy~40c6=Z=&M!)xrnZ*@%^T`EB(%0cKoqku&>1@q4=ozM97;WG+zoVU@AM z*V7j?doL&FT#*xCkP5E>e`$hm0@Qq_j1MxI5jVw^$Jd)KBXIB1`W4|IfQ!EP$V@4^ z4rosB#T=i&WL-{lnT`&Q`bLK9y{lCveAzS` zSl9Vi$RPIZ_|~7d4|+|5g?*dylmo4@_yA4D>?*bNK8ey4 z%r$eDCivoyuO}NFCUy?*|JB!lO&fJBH!6H&pDQsg$Jkn&wMbNV$bb>F|_~g|kSl_h!&BMdrj=Kz_sjB$;R}Ps>VDp?maeA(> z^T_Too8XHxK1nj3jTHQP!-my^g3#Fsp>{b^W7Y9x4v6C&3r;L9lm+|R2lHQWwi#I+=lGqTX?cZ6wdeEbg**SQ& z7{?{#OXH0%I}n*0V)hmrbo(vA7r&YhKrci-`tFwRw!Jd!ZGC9Pbj;oh)|5X4Q$p;o zqWAz~nsZ*WY|z3d3BI`Dlk|$j-)(uR?bon+_=DgLZUJV?%fgrQ5>*gi_UkZ|*-T6D z#TcJ|3E6$ecKe?(WZ(gy?JJtWeHd|GdH6K8_<91q4rxY$FNS?S6bU`)&A#q^-FJ39 zdQVr5%VFT&2mC2mU1jl6?tmlbvCzyWC-~wNYQclv5d0?X{kOKwIkI`^prbE6ckLxu za687igO;VM2);5`{K|73LWyRx1Ya!hq2s^?FZ~3cTEA`0-LI2xMZe99nsDypzz4EB zeUCRj3SWnwTdtv*nscwum*A^5K1mU93ge*UH=CmWqtlt+w*K>%_fa5e>&i(ueW=T8IF@siJ7~}` zKZVb%!rbQ&vkNW!T5WugT^}%<2>2vb-o zal@BwgF|HD@O6{pgHKX7;tw)C<0C!m0zGHgzRvEB4y$kMPN&;5Q|f0&2is0*Qb$t> zE4sfxHB#fWx!Szu?hGT?;6uWA@w$si+h>7Qh`B}kedTOuGbZ?YN5S&J;03tjfltyY zu+0(vS1#jz>(gC3TG!m&!5Ngac~Kof^Etc_u0Zw);2Mnj;9MQ0)}rtF(&v_9=;L=h@r5I#Q`5`_h^j;-D|eqch?_E?ZD{e8>S$4 zAugE5E6fGvkYW}zoR!_jB-i+%gcav~zCnj5eRG@~r|6v);uX-)RFBtW&@^yUa5VKy zC}_mo*iEY%)or&D;(r5XrH067Fst>N@3_SGy1P2Q@!YpRcc>t^795|sc^c{HV$xbp z;FbWFgUtg?rFSnA)W7%0usm4t37ZD__bLer7uw*7nS-yD4LnZI;`2S8Nph8NvUSh2JcSZ|6-jsdLxU z;~So`0BaYYBz~LrnftdsaK|h8JLMmk&ZNfoAU+1%05-F~hNrBS0*Uy8-&m(;dI1el+>2Hl0K57FWHI8q4R%`frzTOp~AGNNz z`*==#x8L+mBKtbV`v>&;M->zuAAHmnK2-}}HaRo^V9nfKBQ4yo4>wlToRNbwPGe3X^v4kyo{?0wam!H1+BQ6{r(_-J>2ilF{>aJQnKI{+2wSB(L_ z5pR8}c;hQ?G=9KAbQm~1?)a1!pCmom)*iGCJ7wL)^Ko_y8ZgPSlAZc$;2WzrWbNYv z(;gQQ95OgG?)VBk-7ooVLz`c<;Hc9|#FgWVj~c_LiGfcNVz*PK?triZ*;O^GjSnR4 zan9`;cG^2{xB&4%7_hib_4d1{U3?|=J*$kbr~gOfUv=B=yZN}#UQkqRd_BLu?|5hT z{$T;c{ocN zI6i6&pK9UWa~k7$ezob414wsAdoaCLReafuW@PT@@X;^RdZtsw5T9a(ZxnIJ(yv`R zo>p6p&#n>eGi`Xb4jPDzH@@swk;KVie8HHW`j~Sk8jMjKCLBum54)X6J613eE?a#+Iv|m#viJM zuVC_iDt*r{PXK&l6^9%be4~v+>IC>F_+9JCet^K67QP^_XC(RR;41`D4Gh^r?99QZ znBgms4@pFNmecmQty{kICcpU6#Rqz$^X9U>?I1+p#4?d3B+}KX z`2<9xxL6er7fb+r;}C}|1)tQ7*E%{54O+o}5Wrmz+|%XdACdg_{*cUg;>$Y<8QUgy zLgO2UIAn2rLOesHAKSHiPUi)fZKXS&7xpl{4=Yt2AK6;5oKa$eueRcl#sN$Z@z|yp zhjp%o9%x;2ciQA05o)asd<@^^yJ!KA^V49l#y7@sNGXH#bE4oE1N(mYYd~PrYvE2G zML(9;;i}^!Pq(lZwj3xIS}gG~8hpZ7htl7)cRiJJQGuKQd3aUS-Ceg<#t$TQj~_ne zAA^iw*@yi7!)iW?7&m;Qh(j8ik?v>NmYsRy8~J|l{6F1x)J4%h3;jPye$4Te8s8cd zd?ffrHHgdEZ+Z@8?q%=B|7%ttz*eZNpSk}(KZn;pAhz{v4=}d)3RQpwo3WWo3n+`NS7K#4}dNzx2Z1AaAkFXMPsS)F&_VCrh zXngp!I}KU~{(rD<^DpgMimq>66d(_;idwh+@n?~b{!VD4P&5|!%4~l}7ZfcUpAvk9 zj!D96KluAG{Wl)nyslWy*PFtU%6-G?OzVc0N0$Eiydyqvf8oq-G^4q)_%t-;QkKQ) z;^WN1*FS;SlU>^73FLo3;MdvW*0R>=4oiROYQOQDJhA8t5ABJhrvk_ANLQNWSQ=x* z_=<_MG7ESN@s-mTo^bb`6#;vZe**L?QqdE(Xv+ackiv3*q4oYd_OhbofkjuH_oOMf z)uH$GOqXvq!$ytIms0bUdI84}U*7}@9mA9}&a<|%_4sJsaX6yi+ORs)x`AijcH4a~PCaY#Lj-!K!7_)+?y zX-J_BTeW>8HD3jrwu?oM;d`qF*kZw}3UXu;^q(&nsI~(#vl;@9o3yG-1 ze1z9Y0(+fw=1qdmcDiPruxmGDs6Yxw^UJ$_bk7OkS>V}A@BGd~jZJo8;Qcu+uxXeJ zhZ`tXy;&yH-L+|a@G&}k*)O{AJZ=luKTeXyAK<|B()T`n64=)BZ|qYwwj3zh7fe#Q z$;BtDr39bHdCLKSOoHeP0XRZvqa9@y8c`+{VeK@*HHmM`R{*7+koV~MYiH)qa5SPH z4SP{k_H}9};NEz%u#ckU@$0^Lg^;hKycIU4dS^=*rv!Y)k-- zMHjFd_;S6@?5xVfAuY%8Tst;d?wy^64a}?!XF<{jtVHs;KIJi3gt26NWsJs4UF+I_ zNR|MsoWKNMISZ{PgOG9T2gVK`<>R9aeAyAY#i2M|g0C9*Dij1)5u}-<2_E~A$%Mqm z$ngz4URV1Y$;Ss^T-H9W2)>FufMsODqy`+G576oFwRb-`bbah@vOC)UR8KG6LJ+ng zZo{m;q}nQ_y#3gw((V>=v%<=%kC;90LP;_j^Vz$;w6lS zZE=auRqTCcE7DJq+DmvJNg%p%)_gEHvOiJw-PI=4xvSL6(DSVA2Beot>VGEpf-5Gl zu0O96Y2RJ#WKr{}vM$BpXfI+<3Hh@)^zh>W(5#c*33C%^-(6EXY$$K4X=7stj*jy4 zoB$jJK)nI#o^bo_dN-BUMdj5~liMc&lS;~S(gas3mwp%M)VSg+Y2Y&oeA!{bd`@O2 zm31v5cLC^v64q;RSOTyzDN64{>>5{m<8kjvJbSME>i7wzJ zk9Ohs4Ps~Q;Hy9!(kzA9CkgF~dg?!%uRN1TwVqH_{obD8T~EDfAgw2)e%bki{(5l# z5m*iu79Awvk0Grex+h0XRxZRSY5U5nF#Q9v_cCzdqq3GFtI>UTvn$HKMx^IK`!IEZ zO-6PxXaQ!;gUc)5fJg%U8mG_N(#`u4fRzL&j2+jl0{0EXTN$(*Tpah^&6B_E!jB#Z za+gt|(YSvN&lg#~>ES|)gC~8!k$hSV(Ukc)KDrla9|N}&E3LV!eSFzB>M#q-#wQ&? ze4CS9zl;OE*Z~Bv3pSj_I=&D7AAv*t2&v3|7gQNv!K@Uj`P7N=L%Q{lUH{yv*pw$R zP1?G066Wt9;4Z|KWzQC_#MYT6%9;xAHdva zf$K0*XAV9<-XrbC{DXx2z!t{~U+e+)mBY4cFU9dG#D~D%hFL0>Tc4JP?-*h|KKd@R zjz4CX?COeR*-Z$50D5v+BTe;-F!xcgj{p~7L;AS2zVB|a0a3QU+X;FK&yR7evt=9i z$GO}l48XoJ+PtWVaLO`_4+1NI3o)i5g0aOnMxmfAx^CbIVhhrvkbacqTmBfAk?t7< za1cbA&m&|B*fpS~V3z<5m|5-PlSg_Tcmddmq7BgX9Q(E(E_D~81YoUTe04pOPIP4r$HTvH$X4p*@9y$-o3!Orw``Z>^T7#H;7=Y zThPRm#%2OHi!i(hxEN>i@SKY=8!-c8I$|nDsCWx{$hXI)&#X;v_^T2sna*qd2v3s_QV()}y8DDmhWp{|5@aHf9#GD`x-z N002ovPDHLkV1h=mmWluX literal 0 HcmV?d00001 diff --git a/remove.ins b/remove.ins new file mode 100644 index 0000000..7c5fb0e --- /dev/null +++ b/remove.ins @@ -0,0 +1,31 @@ +[Initial] +Message=Deinstalliere Python... +DefVar $ExitCode$ +DefVar $Version$ + +[Aktionen] +ShowBitmap "%ScriptPath%\logo.png" "MDG Python" +Sub_PrepareSetup +WinBatch_Setup +Files_Cleanup + +[Sub_PrepareSetup] +Set $Version$ = GetValue("productversion", GetProductMap) + +[WinBatch_Setup] +"%ScriptPath%\data\python-$Version$-amd64.exe" /quiet /uninstall + +[Files_Cleanup] +delete -sf "%ProgramFiles64Dir%\Python39\" + +[Sub_HandleExitCode] +; check return code +Set $ExitCode$ = GetLastExitCode +comment "GetLastExitCode: " + $ExitCode$ +if not($ExitCode$ = "0" or $ExitCode$ = "1605" or $ExitCode$ = "3010") + ; 0 ERROR_SUCCESS + ; 1605 ERROR_UNKNOWN_PRODUCT + ; 3010 ERROR_SUCCESS_REBOOT_REQUIRED + LogError "Fatal: setup returned exit code " + $ExitCode$ + IsFatalError +endif