# recipe for building an exe with nuitka (extreme jank edition) # # NOTE: win7 and win10 builds both work on win10 but # on win7 they immediately c0000005 in kernelbase.dll # # first install python-3.6.8-amd64.exe # [x] add to path # # copypaste the rest of this file into cmd rem from pypi cd \users\ed\downloads python -m pip install --user Nuitka-0.6.14.7.tar.gz rem https://github.com/brechtsanders/winlibs_mingw/releases/download/10.2.0-11.0.0-8.0.0-r5/winlibs-x86_64-posix-seh-gcc-10.2.0-llvm-11.0.0-mingw-w64-8.0.0-r5.zip mkdir C:\Users\ed\AppData\Local\Nuitka\ mkdir C:\Users\ed\AppData\Local\Nuitka\Nuitka\ mkdir C:\Users\ed\AppData\Local\Nuitka\Nuitka\gcc\ mkdir C:\Users\ed\AppData\Local\Nuitka\Nuitka\gcc\x86_64\ mkdir C:\Users\ed\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\ copy c:\users\ed\downloads\winlibs-x86_64-posix-seh-gcc-10.2.0-llvm-11.0.0-mingw-w64-8.0.0-r5.zip C:\Users\ed\AppData\Local\Nuitka\Nuitka\gcc\x86_64\10.2.0-11.0.0-8.0.0-r5\winlibs-x86_64-posix-seh-gcc-10.2.0-llvm-11.0.0-mingw-w64-8.0.0-r5.zip rem https://github.com/ccache/ccache/releases/download/v3.7.12/ccache-3.7.12-windows-32.zip mkdir C:\Users\ed\AppData\Local\Nuitka\Nuitka\ccache\ mkdir C:\Users\ed\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ copy c:\users\ed\downloads\ccache-3.7.12-windows-32.zip C:\Users\ed\AppData\Local\Nuitka\Nuitka\ccache\v3.7.12\ccache-3.7.12-windows-32.zip rem https://dependencywalker.com/depends22_x64.zip mkdir C:\Users\ed\AppData\Local\Nuitka\Nuitka\depends\ mkdir C:\Users\ed\AppData\Local\Nuitka\Nuitka\depends\x86_64\ copy c:\users\ed\downloads\depends22_x64.zip C:\Users\ed\AppData\Local\Nuitka\Nuitka\depends\x86_64\depends22_x64.zip cd \ rd /s /q %appdata%\..\local\temp\pe-copyparty cd \users\ed\downloads python copyparty-sfx.py -h cd %appdata%\..\local\temp\pe-copyparty\copyparty python import os, re os.rename('../dep-j2/jinja2', '../jinja2') os.rename('../dep-j2/markupsafe', '../markupsafe') print("# nuitka dies if .__init__.stuff is imported") with open('__init__.py','r',encoding='utf-8') as f: t1 = f.read() with open('util.py','r',encoding='utf-8') as f: t2 = f.read().split('\n')[3:] t2 = [x for x in t2 if 'from .__init__' not in x] t = t1 + '\n'.join(t2) with open('__init__.py','w',encoding='utf-8') as f: f.write('\n') with open('util.py','w',encoding='utf-8') as f: f.write(t) print("# local-imports fail, prefix module names") ptn = re.compile(r'^( *from )(\.[^ ]+ import .*)') for d, _, fs in os.walk('.'): for f in fs: fp = os.path.join(d, f) if not fp.endswith('.py'): continue t = '' with open(fp,'r',encoding='utf-8') as f: for ln in [x.rstrip('\r\n') for x in f]: m = ptn.match(ln) if not m: t += ln + '\n' continue p1, p2 = m.groups() t += "{}copyparty{}\n".format(p1, p2).replace("__init__", "util") with open(fp,'w',encoding='utf-8') as f: f.write(t) exit() cd .. rd /s /q bout & python -m nuitka --standalone --onefile --windows-onefile-tempdir --python-flag=no_site --assume-yes-for-downloads --include-data-dir=copyparty\web=copyparty\web --include-data-dir=copyparty\res=copyparty\res --run --output-dir=bout --mingw64 --include-package=markupsafe --include-package=jinja2 copyparty