рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
Acronis рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реА рдЕрдкрдиреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдПрдХ рдкрд╛рдпрдерди 3 рднрд╛рд╖рд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдЗрди рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреЛрд╕реНрдЯ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╢реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдкрд░рд┐рдорд┐рдд рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рд╕реАрдорд┐рдд рдХреЙрдореНрдкреИрдХреНрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рд╣рд╛рд▓рд╛рдБрдХрд┐,
python.org рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рддрд░рд┐рдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрдЬрдЧрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рдЕрдХреЗрд▓реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЬреЛ рд╕реНрд╡рдпрдВ рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╛рдИ-рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕реАрд▓рд┐рдП, рд╣рдордиреЗ рддреБрд░рдВрдд рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреА рдРрд╕реА рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдУрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛, рдЬреИрд╕реЗ рдЬрд╝рд┐рдк рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдореЗрдВ рд╕реНрдерд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЬрдм рдПрдХ рдпрд╛ рдХрдИ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдЬрдЧрд░ рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рдПрдХ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреАрдЫреЗ рдореБрдбрд╝рдХрд░ рджреЗрдЦреЗрдВ, рд╣рдо рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рдЬрд┐рдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ рд╣реИред рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрд┐рдк-рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рдж, рдЬрд┐рдк-рдкреЗрдЧрд┐рдВрдЧ рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде imbued, рд╣рдо рд╕реНрд╡рд╛рдж рдореЗрдВ рдЗрддрдиреЗ рдмрдврд╝ рдЧрдП рдХрд┐ рдЕрдЬрдЧрд░ рднрд╛рд╖рд╛ (рдЗрд╕рдХреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рдЧ) рдХреЗ рдкреВрд░реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рднреА рдПрдХ рдЕрд▓рдЧ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╢реБрд░реБрдЖрдд
рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рднреА рдЗрдЪреНрдЫрд┐рдд рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдкрд░реНрдпрд╛рд╡рд░рдг рд╡рд┐рдВрдбреЛрдЬ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рд╕рдордп рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд┐рдХрд▓рд╛ред рдЬреЛ рд▓реЛрдЧ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд▓рд┐рдирдХреНрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рдореВрд▓рднреВрдд рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬ рд╣реИ рд╕реНрдерд╛рдкрд┐рдд python3, рдпрд╛ рддреЛ рдЖрдкрдХреЗ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдХреЗ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдпрд╛ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ / рдореЗрдХ / рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗредрд╕рд░рд▓ рдбреЗрдореЛ рдореЙрдбреНрдпреВрд▓ рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╝рд┐рдк рдореЗрдВ рдкреИрдХ рдХрд░реЗрдВрдЧреЗ рд╡реЗ рд╢реБрд░реВ рдореЗрдВ d: \ habr \ lib рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ:
- say_hello.py
def say_hello(): print("Hello python world.")
- my_sysinfo / __ init__.py
from .sysinfo import print_sysinfo
- my_sysinfo / sysinfo.py
import sys import traceback def print_sysinfo(): print(80 * '-') print(sys.version) print(80 * '-') traceback.print_stack() print(80 * '-')
рдЪреВрдВрдХрд┐, рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ, рдореИрдВ рд╕рд┐рд░реНрдл рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рджреЛ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдП, рдкрд╣рд▓рд╛
say_hello
рдореЙрдбреНрдпреВрд▓ рдореЗрдВ
say_hello()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ
say_hello.py
рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ, рджреВрд╕рд░рд╛
my_sysinfo
рдореЙрдбреНрдпреВрд▓ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛ рд╣реИ - рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ
__init__.py
рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рдЖрдпрд╛рдд рд╕реВрдЪреА рдореЗрдВ
print_sysinfo
рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рддреБрд░рдВрдд рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рдЬреИрд╕реЗ рдХрд┐
sys.version
рдЬреИрд╕реА рдЕрдиреНрдп рд╕рд╛рд░рд╛рдВрд╢ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ
sys.version
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд┐рдк рдкреЗрдЬрд┐рдВрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдирдкреИрдХреНрдб рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
c:\Python33\python.exe
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path.insert(0,'d:\\habr\\lib') >>> import say_hello >>> say_hello.say_hello() Hello python world. >>> import my_sysinfo >>> my_sysinfo.print_sysinfo() -------------------------------------------------------------------------------- 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] -------------------------------------------------------------------------------- File "<stdin>", line 1, in <module> File "d:\habr\lib\my_sysinfo\sysinfo.py", line 9, in print_sysinfo traceback.print_stack() --------------------------------------------------------------------------------
рдЬрд┐рдк рдкреИрдХрд┐рдВрдЧ
рдЬрд╝рд┐рдк рдореЗрдВ рд╕реНрд░реЛрдд py-files рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рдЙрдкрд▓рдмреНрдз рдХрд┐рд╕реА рднреА рдЬрд╝рд┐рдк рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдорд╛рдирдХ
zipfile
рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдПрдХ рдЕрдЬрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╛рдж рдореЗрдВ, рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рджреВрдВрдЧрд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ
mkpyzip.py рдирд╛рдо рджрд┐рдпрд╛ рд╣реИ рдФрд░ d: \ habr \ Tools рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИред
рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ: рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде \ habr \ output \ mybundle.zip:
:\Python33\python.exe d:\habr\tools\mkpyzip.py --src d:\habr\lib\my_sysinfo d:\habr\lib\say_hello.py --out d:\habr\output\mybundle.zip ::: d:\habr\lib\my_sysinfo\__init__.py >>> mybundle.zip/my_sysinfo/__init__.py ::: d:\habr\lib\my_sysinfo\sysinfo.py >>> mybundle.zip/my_sysinfo/sysinfo.py ::: d:\habr\lib\say_hello.py >>> mybundle.zip/say_hello.py
рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд╖реНрдХрд░реНрд╖ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХрд┐рд╕ рдирд╛рдо рдХреЗ рддрд╣рдд рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреИрдХ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
c:\Python33\python.exe
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path.insert(0, 'd:\\habr\\output\\mybundle.zip') >>> import say_hello >>> say_hello.say_hello() Hello python world. >>> import my_sysinfo >>> my_sysinfo.print_sysinfo() -------------------------------------------------------------------------------- 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] -------------------------------------------------------------------------------- File "<stdin>", line 1, in <module> File "d:\habr\output\mybundle.zip\my_sysinfo\sysinfo.py", line 9, in print_sysinfo traceback.print_stack() --------------------------------------------------------------------------------
рдпрд╣ рдЖрдЙрдЯрдкреЛрд╕реНрдЯ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди
my_sysinfo.print_sysinfo()
рд╕реЗ рд╕реНрдЯреИрдХ рдХрд╛ рдПрдХ рдкреНрд░рд┐рдВрдЯрдЖрдЙрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдмреБрд▓рд╛рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рд╣рдорд╛рд░реА рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реИ - d: \ habr \ output \ mybundle .zip \ my_sysinfo \ sysinfo.py
рдЬрд╝рд┐рдк рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╕рдордп рдмрд╛рдЗрдЯрдХреЛрдб рдЬреЗрдирд░реЗрд╢рди
рдФрд░ рдЕрдм рдПрдХ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╛ рдЬрдм рдпрд╣ рдЖрдпрд╛рдд рдХреЗ рд╕рдордп рдореЗрдВ рдорд╛рдиреНрдп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╛ рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреА рдРрд╕реА рдкреНрд░рд╕рд┐рджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЬрд╝рд┐рдк рдореЗрдВ рдкреИрдХ рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪреАрдЬреЗрдВ рдХреБрдЫ рдЕрд▓рдЧ рд╣реИрдВред рдЬрд╝рд┐рдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП, рдмрд╛рдЗрдЯ рдХреЛрдб рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЗрдирд░реЗрдЯ рдФрд░ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдмрд╛рдЗрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реА
mkpyzip.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ,
рдмрд╛рдЗрдЯрдХреЛрдб рдЬреЗрдирд░реЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИ, рдмрд╕ -
--mkpyc
рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЬрд┐рдк рдлрд╛рдЗрд▓ рдХреЛ
--mkpyc
:
c:\Python33\python.exe d:\habr\tools\mkpyzip.py --mkpyc --src d:\habr\lib\my_sysinfo d:\habr\lib\say_hello.py --out d:\habr\output\mybundle.zip ::: d:\habr\lib\my_sysinfo\__init__.py >>> mybundle.zip/my_sysinfo/__init__.py ::: mkpyc for: d:\habr\lib\my_sysinfo\__init__.py >>> mybundle.zip/my_sysinfo/__init__.pyc ::: d:\habr\lib\my_sysinfo\sysinfo.py >>> mybundle.zip/my_sysinfo/sysinfo.py ::: mkpyc for: d:\habr\lib\my_sysinfo\sysinfo.py >>> mybundle.zip/my_sysinfo/sysinfo.pyc ::: d:\habr\lib\say_hello.py >>> mybundle.zip/say_hello.py ::: mkpyc for: d:\habr\lib\say_hello.py >>> mybundle.zip/say_hello.pyc
рдЕрдм рдЬрдм рдЕрдЬрдЧрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рддреЛ mkpyzip.py рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдХреЛрдб рдХреЛ рд▓рд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдореИрдВ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдмрд╛рдпрдЯреЗрдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдорд╛рдирдХ рдкрд╛рдпрдерди рднрд╛рд╖рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЗрд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ wr_long рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░реЗрдВ)ред
mkpyzip.py import argparse import imp import io import marshal import os import os.path import zipfile def compile_file(filename, codename, out): def wr_long(f, x): f.write(bytes([x & 0xff, (x >> 8) & 0xff, (x >> 16) & 0xff, (x >> 24) & 0xff])) with io.open(filename, mode='rt', encoding='utf8') as f: source = f.read() ast = compile(source, codename, 'exec', optimize=1) st = os.fstat(f.fileno()) timestamp = int(st.st_mtime) size = st.st_size & 0xFFFFFFFF out.write(b'\0\0\0\0') wr_long(out, timestamp) wr_long(out, size) marshal.dump(ast, out) out.flush() out.seek(0, 0) out.write(imp.get_magic()) def compile_in_memory(source, codename): with io.BytesIO() as fc: compile_file(source, codename, fc) return fc.getvalue() def make_module_catalog(src): root_path = os.path.abspath(os.path.normpath(src)) root_arcname = os.path.basename(root_path) if not os.path.isdir(root_path): return [(root_path, root_arcname)] catalog = [] subdirs = [(root_path, root_arcname)] while subdirs: idx = len(subdirs) - 1 subdir_path, subdir_archname = subdirs[idx] del subdirs[idx] for item in sorted(os.listdir(subdir_path)): if item == '__pycache__' or item.endswith('.pyc'): continue item_path = os.path.join(subdir_path, item) item_arcname = '/'.join([subdir_archname, item]) if os.path.isdir(item_path): subdirs.append((item_path, item_arcname)) else: catalog.append((item_path, item_arcname)) return catalog def mk_pyzip(sources, outzip, mkpyc=False): zipfilename = os.path.abspath(os.path.normpath(outzip)) display_zipname = os.path.basename(zipfilename) with zipfile.ZipFile(zipfilename, "w", zipfile.ZIP_DEFLATED) as fzip: for src in sources: catalog = make_module_catalog(src) for entry in catalog: fname, arcname = entry[0], entry[1] fzip.write(fname, arcname) print("::: {} >>> {}/{}".format(fname, display_zipname, arcname)) if mkpyc and arcname.endswith('.py'): bytes = compile_in_memory(fname, arcname) pyc_name = ''.join([os.path.splitext(arcname)[0], '.pyc']) fzip.writestr(pyc_name, bytes) print("::: mkpyc for: {} >>> {}/{}".format(fname, display_zipname, pyc_name)) def main(): parser = argparse.ArgumentParser() parser.add_argument('--src', nargs='+', required=True) parser.add_argument('--out', required=True) parser.add_argument('--mkpyc', action='store_true') args = parser.parse_args() mk_pyzip(args.src, args.out, args.mkpyc) if __name__ == '__main__': main()
рдмрд╛рдЗрдЯрдХреЛрдб рд╡реИрдзрддрд╛
рдореИрдВ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЬреЛ рдмрд╛рдпрдЯреЗрдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╡реИрдз рд╣реИ рдФрд░ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдЗрд╕реЗ рддрдм рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдард╛рддрд╛ рд╣реИ рдЬрдм рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд┐рдП рдмрд┐рдирд╛ рдирдП рдмрд╛рдпреЛрдЯреЗрдХ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкреБрди: рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
__file__
say_hello рдореЙрдбреНрдпреВрд▓ рдкрд░
__file__
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред
c:\Python33\python.exe
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path.insert(0,'d:\\habr\\output\\mybundle.zip') >>> import say_hello >>> say_hello.__file__ 'd:\\habr\\output\\mybundle.zip\\say_hello.pyc'
рдпрд╣ рддрдереНрдп рдХрд┐
__file__
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ pyc рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдмрд┐рдВрджреБрдУрдВ
__file__
рд╡рд┐рд╢реЗрд╖рддрд╛
__file__
, рд╣рдорд╛рд░реЗ bytecode рдХреА рд╡реИрдзрддрд╛ рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдорд╛рдг рд╣реИред
рдЗрд╕рдХреЗ рд╕рд╛рде, рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╡реЗрдХ рдХреЗ рд╕рд╛рде рдЕрдЬрдЧрд░ рднрд╛рд╖рд╛ рдореЗрдВ рдЬрд╝рд┐рдк-рдкреИрдХрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд╕рдореАрдХреНрд╖рд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдПрдХ "рд▓реЗрдХрд┐рди" рдирд╣реАрдВ ...
рдЖрд╢реНрдЪрд░реНрдп
рдореЗрд░реЗ рдПрдХ рд╕рд╣рдХрд░реНрдореА рдиреЗ рдПрдХ рдмрд╛рд░
рдЧреНрд░рд╣рдг рдЙрдард╛рдпрд╛ рдФрд░, рдЬрд╛рдиреЗ-рдорд╛рдиреЗ рдРрдб-рдСрди
PyDev рдХреА рдорджрдж рд╕реЗ
, рдЙрд╕ рдЕрдЬрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдЙрд╕рдиреЗ рд▓рд┐рдЦреА рдереА, рдЬреЛ рдХрд┐ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЬрдЧрд░ рдиреЗ рдХреЗрд╡рд▓ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬрд╝рд┐рдк рдХрд┐рдпрд╛ред
рдореБрдЦреНрдп рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рдпрд╣ рдерд╛ рдХрд┐ рдкреНрдпрджреЗрд╡ рдиреЗ рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕ рдкрд░реЗрд╢рд╛рдиреА рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддреЗ рд╣реБрдП, рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреА рдЦреЛрдЬ рд╢реБрд░реВ рдХреАред рдЕрдм, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреАрдЫреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐, PyDev рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬрд┐рдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдкрд░реНрдпрд╛рдкреНрдд рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред
рдлрд┐рд░ рднреА, рдЕрдзреНрдпрдпрди рдХреЗ рд╕рдордп, PyDev рдХреЗ рддрд╣рдд рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рддреБрд░рдВрдд рд╕рдореАрдХреНрд╖рд╛ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд pdb рдбрд┐рдмрдЧрд░ рдиреЗ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрджрд┐рдЧреНрдз рдереА рдЬрдм рд╕реНрд░реЛрдд py-files рдХреЗ рд╕рд╛рде, рдмрд╛рдЗрдЯ-рдХреЛрдб рд╡рд╛рд▓реА pyc- рдлрд╛рдЗрд▓реЗрдВ рднреА рдЬрд╝рд┐рдк-рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдереАрдВред рдХреЗрд╡рд▓ рдкрд╛рдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдмрд╛рдЗрдЯ рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рдерд╛, рдФрд░ рдкреАрдбреАрдмреА рдореЗрдВ рдбреАрдмрдЧрд┐рдВрдЧ рдиреЗ рд╕рд╣реА рдЬрд╛рдирдХрд╛рд░реА рджреА, рдЬрд┐рд╕рд╕реЗ рдХреЛрдИ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рд╣реБрдИред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдлрд┐рд░ рднреА, рд╣рдорд╛рд░реЗ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рдЬрд░реВрд░ рдереАред рдФрд░ рдкреАрдбреАрдмреА рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ред
рдЕрдм рдЬрдм рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрд░реЛрдд рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ pdb рдХреЗ рддрд╣рдд рдЕрдЬрдЧрд░ рдХреЛрдб рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдкрд╣рд▓реЗ рд▓рд┐рдЦреЗ my_sysinfo рдореЙрдбреНрдпреВрд▓ рд╕реЗ print_sysinfo () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╝рд┐рдк рдХрд┐рдП рдЧрдП рдмрд╛рдЗрдЯ рдХреЛрдб рд╕реЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред
c:\Python33\python.exe
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path.insert(0,'d:\\habr\\output\\mybundle.zip') >>> import my_sysinfo >>> my_sysinfo.print_sysinfo() -------------------------------------------------------------------------------- 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] -------------------------------------------------------------------------------- File "<stdin>", line 1, in <module> File "my_sysinfo/sysinfo.py", line 9, in print_sysinfo traceback.print_stack() --------------------------------------------------------------------------------
рдЕрдм рд╣рдо
рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП
рдЧрдП рдЗрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ
рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рдЬрд╝рд┐рдк рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВред рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрде рд╣реИред
рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрд╛рдпреЛрдЯреЗрдХ рдХреЗ рдмрд┐рдирд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдерд╛:рдлрд╝рд╛рдЗрд▓ "рд╕реНрдЯрдбрд┐рди", рд▓рд╛рдЗрди 1, "рдореЙрдбреНрдпреВрд▓" рдореЗрдВ
рдлрд╝рд╛рдЗрд▓ "
d: \ habr \ output \ mybundle.zip \ my_sysinfo \ sysinfo.py ", рдкрдВрдХреНрддрд┐ 9, Print_sysinfo рдореЗрдВ
рдЯреНрд░реЗрд╕рдмреИрдХ.рдкреНрд░рд┐рдВрдЯ_рд╕реНрдЯреИрдХ ()
рдФрд░ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕рдиреЗ рдлрд╛рд░реНрдо рд▓рд┐рдпрд╛:рдлрд╝рд╛рдЗрд▓ "рд╕реНрдЯрдбрд┐рди", рд▓рд╛рдЗрди 1, "рдореЙрдбреНрдпреВрд▓" рдореЗрдВ
рдкреНрд░рд┐рдВрдЯ "
my_sysinfo / sysinfo.py ", рдкрдВрдХреНрддрд┐ 9, Print_sysinfo рдореЗрдВ
рдЯреНрд░реЗрд╕рдмреИрдХ.рдкреНрд░рд┐рдВрдЯ_рд╕реНрдЯреИрдХ ()
рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдирд┐рд░рдкреЗрдХреНрд╖ рдкрде рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдПрдХ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдкрде, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреА рдЬрдбрд╝ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ, рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдХреЛ рддреБрд░рдВрдд рдЗрд╕ рдмрд╛рдд рдкрд░ рдЖрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕реНрд╡рдпрдВ рдЗрд╕
mkpyzip.py рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ
compile
рдмрд┐рд▓рд┐рдпрди рдлрд╝рдВрдХреНрд╢рди
compile
рд▓рд┐рдП рдЗрд╕ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХреЛ рд╕рдмрдорд┐рдЯ рдХрд░рдХреЗ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ
рдмрд╛рдпрдЯреЗрдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░рд╛ рд░рд╛рд╕реНрддрд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рдПрдХ рдорд╢реАрди рдкрд░ рдЬрд┐рдк рд╕рдВрдЧреНрд░рд╣ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ, рд╕рдВрднрд╡рддрдГ рдПрдХ рдорд╢реАрди рдкрд░ рднреА рдПрдХ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдоред
рдЙрд╕ рд╕рдордп рд╣рдо рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдореЗрдВ рд▓реЛрдбрд┐рдВрдЧ рдЬрд┐рдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛, рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдХреНрдпрд╛ рд╣реИ: рдХреНрдпрд╛ рд╣рдо рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдмрд╛рдЗрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реБрдП рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдлрд┐рд░ рдХреНрдпрд╛ рдЕрдЬрдЧрд░ рдореЗрдВ рд▓реЛрдб рдореЙрдбреНрдпреВрд▓ рд▓реЛрдбрд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдЕрдЬрдЧрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╕рд▓рд╛рд╣ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдЦреБрдж
python-dev@python.org рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛
рдерд╛ ред рдЙрд╕ рд╕рдордп рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рдореЗрдВ рдЬреЛ рднреА рд╕рд▓рд╛рд╣ рджреА рдереА, рд╡рд╣ рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдмрдЧ рдерд╛ рддрд╛рдХрд┐ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рдЦреЛ рди рдЬрд╛рдПред рд╣рдордиреЗ рдПрдХ
рдмрдЧ Bugs.python.org/issue18307 рдмрдирд╛рдпрд╛ рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд▓рдЧреЗред рд▓рдЧрднрдЧ рдПрдХ рдорд╣реАрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рди рд░реВрдк рд╕реЗ рджрдмрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдЙрд▓рдЭрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░рд╛ рдзреИрд░реНрдп рдЪреБрдкрдЪрд╛рдк рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛, рдФрд░ python33.dll рдбрд┐рдмрдЧрд░ рдореЗрдВ рдЖ рдЧрдпрд╛ред
рдирддреАрдЬрддрди, рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕рдВрджреЗрд╣ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдФрд░ рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рд╣рдо рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдЬрдЧрд░ рдореЗрдВ рдЬрд┐рдк-рдореЙрдбреНрдпреВрд▓ рд▓реЛрдбрд░ рдХрд╛ рд╕реА-рд╢рдирд╛рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдмрд╛рдЗрдЯ рдХреЛрдб рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓рд╛, рдЬрд┐рд╕реЗ рдмрд╛рдЗрдЯ рдХреЛрдб рдореЗрдВ рдкрдереЛрдВ рдХреЗ рд╕реНрд╡рдд: рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рдЗрд╕реЗ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╕ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрд╕реА рдмрдЧ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдкреИрдЪ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЙрд▓ рд╕реНрдЯреИрдХреНрд╕ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрдереЛрдВ рдХреЛ рдирд┐рд░рдкреЗрдХреНрд╖ рд░реВрдк рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм, рд▓рдЧрднрдЧ рдЖрдзреЗ рд╕рд╛рд▓ рдмрд╛рдж,
Bugs.python.org рдкрд░ рдпрд╣ рдмрдЧ рдЦреБрд▓рд╛ рд░рд╣рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рдЬрд╝рд┐рдк рдореЙрдбреНрдпреВрд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рдХреЗ рдЕрдВрджрд░ рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЗ рд╕рд╛рде рдорд╛рдорд▓рд╛ред рдлрд┐рд░ рднреА, рдЕрдЬрдЧрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдЕрдкрдиреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реЛрдиреЗ (рдЬреЛ рд╣рдо рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореВрд▓ рдХреЗ рдЬрд┐рддрдирд╛ рдХрд░реАрдм рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ), рд╣рдордиреЗ рд╕рд┐рд░реНрдл рдЗрд╕ рдкреИрдЪ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдпрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдЬрдЧрд░ рдореЗрдВ рдореЙрдбреНрдпреВрд▓, рдПрдХ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдирдкреИрдХреНрдб рд░реВрдк рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЙрди рджреЛрдиреЛрдВ рдХреЛ рдЧреНрд░рд╣рдг + PyDev рдФрд░ рдЕрдиреНрдп IDE рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдбреАрдмрдЧ рдХрд░рдирд╛ рднреА PyDev рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдлрд┐рд░ рднреА, рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдмрд╛рдЗрдирд░реА рдЙрддреНрдкрд╛рджрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╕реЗрдЯ рдХреА рдХреНрд╖рдорддрд╛ рдЖрдИрдбреАрдИ рдореЗрдВ рдЕрдЬрдЧрд░ рдХреЛрдб рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддреА рд╣реИред
рдкреБрдирд╢реНрдЪ рд╣рдордиреЗ рд╕реЗрдЯрдкреНрдЯреВрд▓ / рдЕрдВрдбреЗ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛? рдирд╣реАрдВред
рдЕрдЬрдЧрд░ рдореЗрдВ рдЬрд┐рдк рдореЙрдбреНрдпреВрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдФрд░ рдЖрддреНрдордирд┐рд░реНрднрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИрдВ, рдЬреЛ рднрд╛рд╖рд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИрдВред setuptools / рдЕрдВрдбреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИред