(window.webpackJsonp=window.webpackJsonp||[]).push([[2698],{3106:function(t,s,a){"use strict";a.r(s);var n=a(31),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"distribution"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#distribution"}},[t._v("#")]),t._v(" Distribution")]),t._v(" "),a("h2",{attrs:{id:"py2app"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#py2app"}},[t._v("#")]),t._v(" py2app")]),t._v(" "),a("p",[t._v("To use the py2app framework you must install it first. Do this by opening terminal and entering the following command:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("sudo easy_install "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("U py2app\n\n")])])]),a("p",[t._v("You can also "),a("code",[t._v("pip")]),t._v(" install the packages as :")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("pip install py2app \n\n")])])]),a("p",[t._v("Then create the setup file for your python script:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("py2applet "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("make"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("setup MyApplication"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("py\n\n")])])]),a("p",[t._v("Edit the settings of the setup file to your liking, this is the default:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[a("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\nThis is a setup.py script generated by py2applet\n\nUsage:\n python setup.py py2app\n"""')]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" setuptools "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" setup\n\nAPP "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'test.py'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nDATA_FILES "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nOPTIONS "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'argv_emulation'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nsetup"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n app"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("APP"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n data_files"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("DATA_FILES"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n options"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'py2app'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" OPTIONS"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n setup_requires"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'py2app'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),a("p",[t._v("To add an icon file (this file must have a .icns extension), or include images in your application as reference, change your options as shown:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("DATA_FILES "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'myInsertedImage.jpg'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nOPTIONS "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'argv_emulation'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'iconfile'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'myCoolIcon.icns'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])])]),a("p",[t._v("Finally enter this into terminal:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("python setup"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("py py2app\n\n")])])]),a("p",[t._v("The script should run and you will find your finished application in the dist folder.")]),t._v(" "),a("p",[t._v("Use the following options for more customization:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("optimize "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("O"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" optimization level"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("O1 "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"python -O"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("O2 "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"python -OO"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("O0 to disable "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("O0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nincludes "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" comma"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("separated "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("list")]),t._v(" of modules to include\n\npackages "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("p"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" comma"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("separated "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("list")]),t._v(" of packages to include\n\nextension Bundle extension "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("default"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("plugin "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v("\n plugin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nextra"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("scripts comma"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("separated "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("list")]),t._v(" of additional scripts to include\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" an application "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("or")]),t._v(" plugin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n\n")])])]),a("h2",{attrs:{id:"cx-freeze"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#cx-freeze"}},[t._v("#")]),t._v(" cx_Freeze")]),t._v(" "),a("p",[t._v("Install cx_Freeze from "),a("a",{attrs:{href:"https://sourceforge.net/projects/cx-freeze/files/4.3.1/cx_Freeze-4.3.1.tar.gz/download?use_mirror=kent&download=",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("Unzip the folder and run these commands from that directory:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("python setup"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("py build\nsudo python setup"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("py install\n\n")])])]),a("p",[t._v("Create a new directory for your python script and create a "),a("strong",[t._v('"setup.py"')]),t._v(" file in the same directory with the following content:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("application_title "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"My Application"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Use your own application name")]),t._v("\nmain_python_file "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"my_script.py"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Your python script")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" sys\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" cx_Freeze "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" setup"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Executable\n\nbase "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" sys"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("platform "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"win32"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n base "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Win32GUI"')]),t._v("\n\nincludes "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"atexit"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"re"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nsetup"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" application_title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n version "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n description "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Your Description"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n options "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"build_exe"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"includes"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" includes "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n executables "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Executable"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("main_python_file"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" base "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" base"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),a("p",[t._v("Now run your setup.py from terminal:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("python setup"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("py bdist_mac\n\n")])])]),a("p",[a("strong",[t._v("NOTE: On El Capitan this will need to be run as root with SIP mode disabled.")])])])}),[],!1,null,null,null);s.default=e.exports}}]);