рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ, рд╕рднреА рдЕрдЬрдЧрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ: рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕реНрд░реЛрдд рдореЗрдВ рдЖрд╡реЗрджрди рджреЗрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЫрд┐рдкрд╛рдПрдВред рдФрд░ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдкреНрдпрд╛рд░реА рднрд╛рд╖рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд) рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ: Google рдЦреЛрдЬ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдХреБрдЫ рднреА рдирд╣реАрдВ, рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдпрд╛ рд╕рднреА рдкрд╛рдЧрд▓)ред
рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рджреВрд░ pyc рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИред рдХрдИ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж рдЗрд╕ рдЦрддрд░реЗ рдХреЗ рдЬрд╡рд╛рдм рдХреА рддрд▓рд╛рд╢ рдореЗрдВ, рдХреЗрд╡рд▓ рд╕рдВрднрд╡ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛: рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЕрдЬрдЧрд░ <2.7 рдХреЗ рд▓рд┐рдП, "рдбрд┐рдХрдореНрдкреНрд░реЗрд╕рд░" рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рдкреИрд╕реЗ рдХреЗ рд▓рд┐рдП 2.7 рдФрд░ рдЙрдЪреНрдЪрддрд░ рджреЗрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдФрд░ рдпрд╣
рдЙрдкрдХрд░рдг , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдХреБрдЫ рд╣реА рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЕрдкрдирд╛ рдПрдХ-рдПрдХ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред
рдмрд╛рдЗрдирд░реА рдореЗрдВ рдмрд┐рд▓реНрдб рд╡рд┐рдХрд▓реНрдк рдХрд╛рдлреА рдЖрдХрд░реНрд╖рдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдареАрдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╕рднреА рдХрд▓реЗрдХреНрдЯрд░ (рдиреАрдЪреЗ рдореИрдВ cx_Freeze рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╣реА рд╣реИ рдЬреЛ рд╡реЗ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ .yc, рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдФрд░ рдлрд┐рд░ рдпрд╣ рдореБрдЭ рдкрд░ рдЫрд╛ рдЧрдпрд╛ред
рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ):
TestModule/__init__.py
TestModule/Config.py
ui/__init__.py
ui/mainwindow.py
ui/loginwindow.py
main.py
рдпрд╣рд╛рдВ, рдореИрдВ рддреБрд░рдВрдд рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
- рдореЗрдирдлреНрд░реЗрдо рдлрд╛рдЗрд▓ рдореЗрдВ, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рдФрд░ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ
- __Init__.py рдлрд╛рдЗрд▓реЗрдВ рдЕрдзрд┐рдорд╛рдирддрдГ рдЦрд╛рд▓реА рд╣реИрдВред
рд╣рдо рдХреБрдЫ рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рддреЗ рд╣реИрдВ:
$ sudo apt-get install cython
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ рд╕рдВрдХрд▓рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext ext_modules = [ Extension("TestModule.Config", ["TestModule/Config.py"]), Extension("ui.mainwindow", ["ui/mainwindow.py"]), Extension("ui.loginwindow", ["ui/loginwindow.py"]), ] setup( name = 'Test App', cmdclass = {'build_ext': build_ext}, ext_modules = ext_modules )
- рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ (рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореВрд▓ рдореЗрдВ) рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ
$ python compile.py build_ext --inplace
- рдЕрдм рд╣рдо * .so рдФрд░ __init__.py рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЕрдм рдХреЛрдИ рднреА рд╕реЛрд░реНрд╕ рдХреЛрдб рдирд╣реАрдВ рдкрдврд╝реЗрдЧрд╛ред рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рджреЗрдирд╛ рдЬрд▓реНрджрдмрд╛рдЬреА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЕрдЬрдЧрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ "рдкреИрдХреЗрдЬ" рдореЗрдВ рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ:
$ sudo apt-get install cx-freeze
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ, рдкреИрдХ рдПрд░реЛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
from cx_Freeze import setup, Executable setup( name = "Test App", version = "0.1", description = "test", executables = [Executable("main.py")])
$ python pack.py build
- рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ "рдЕрдкрдиреЗ" рдлрд╝реЛрд▓реНрдбрд░ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ / exe.linux-x86_64-2.7 рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
- рд╣рдо рдкрд░рд┐рдгрд╛рдореА рдмрд╛рдЗрдирд░реА рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд▓рд╛рдкрддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдирдХрд▓ рдХрд░реЗрдВ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ PyQt рдерд╛)
рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкреИрдХреЗрдЬ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдкреАрдПрд╕ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рд╕рд░рд▓-рдХреИрд╕реЗ рдХреЛ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред