2017.12.28 うえすぎ
standalone exe from python
1. install python (version 3.6)
https://www.anaconda.com/download/
Start "anaconda prompt". cd to python source.
2. install cx_Freeze
pip install cx_Freeze
3. make setup.py
***setup.py***
from cx_Freeze import setup, Executable
base = None
executables = [Executable("XXXXX.py", base=base)]
packages = ["idna"]
options = {
'build_exe': {
'packages':packages,
},
}
setup(
name = "test",
options = options,
version = "0.5",
description = 'test',
executables = executables
)
**************
4. compile
python setup.py build
XXXXX.exe is generated in "build\exe.win-amd64-3.6" with a lot of dlls.
同じバージョンの python がインストールされていればこれだけでも良いはず。
5. install NSIS (portable)
https://portableapps.com/apps/development/nsis_portable
6. make path (in anaconda prompt)
set path=%PATH%;c:\tool\NSISPortable\App\NSIS
7. copy the icon file
ex. copy py.ico to python source code
8. make setup.nis. Change the target name (XXXXX.exe) as your file name.
***setup.nis***
!define cx_FreezeOutputDir 'build\exe.win-amd64-3.6'
!define exe 'XXXXX.exe'
!define icon 'py.ico'
!define compressor 'lzma' ;one of 'zlib', 'bzip2', 'lzma'
!define onlyOneInstance
!include FileFunc.nsh
!insertmacro GetParameters
; - - - - do not edit below this line, normaly - - - -
!ifdef compressor
SetCompressor ${compressor}
!else
SetCompress Off
!endif
Name ${exe}
OutFile ${exe}
SilentInstall silent
!ifdef icon
Icon ${icon}
!endif
; - - - - Allow only one installer instance - - - -
!ifdef onlyOneInstance
Function .onInit
System::Call "kernel32::CreateMutexA(i 0, i 0, t '$(^Name)') i .r0 ?e"
Pop $0
StrCmp $0 0 launch
Abort
launch:
FunctionEnd
!endif
; - - - - Allow only one installer instance - - - -
Section
; Get directory from which the exe was called
System::Call "kernel32::GetCurrentDirectory(i ${NSIS_MAX_STRLEN}, t .r0)"
; Unzip into pluginsdir
InitPluginsDir
SetOutPath '$PLUGINSDIR'
File /r '${cx_FreezeOutputDir}\*.*'
; Set working dir and execute, passing through commandline params
SetOutPath '$0'
${GetParameters} $R0
ExecWait '"$PLUGINSDIR\${exe}" $R0' $R2
SetErrorLevel $R2
SectionEnd
***************
9. generate standalone version exe.
makensis setup.nis
Thank you.
ref
http://fanblogs.jp/mountain4101/archive/59/0
http://www.py2exe.org/index.cgi/SingleFileExecutable