+ ?j4^RIt^RIt^RIt^RIHtHt^RIHt^RIH t ]P!R]P4t ]P!R]P4t ]P!]4t!RR4tR#) N)joinsplit)execute)Versionz (?:\#!\s*){0,1} # shebang prefix (?P .*?/bin/.*?)? (?P python|pypy) (?P \d[\.\d]*)? (?P -dbg)? (?P.*) a- (?P.*?) (?:\. (?Pabi\d+) |(?:\. (?P (?Pcpython|pypy) - (?P\d{2}) (?P[a-z]*?) ) (?: -(?P[^/]*?) )? ))? (?P_d)? \.so$ca]tRt^e))(1 f%!!&))(. f%)- g& Y 5#4ENE 7 7EM")+t">> sorted(Interpreter.parse('pypy').items()) [('debug', None), ('name', 'pypy'), ('options', ()), ('path', None), ('version', None)] >>> sorted(Interpreter.parse('/usr/bin/python3.3-dbg').items()) [('debug', '-dbg'), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.3')] >>> sorted(Interpreter.parse('#! /usr/bin/pypy --foo').items()) [('debug', None), ('name', 'pypy'), ('options', ('--foo',)), ('path', '/usr/bin/'), ('version', None)] >>> sorted(Interpreter.parse('#! /usr/bin/python3.2').items()) [('debug', None), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.2')] >>> sorted(Interpreter.parse('/usr/bin/python3.2-dbg --foo --bar').items()) [('debug', '-dbg'), ('name', 'python'), ('options', ('--foo', '--bar')), ('path', '/usr/bin/'), ('version', '3.2')] r) SHEBANG_REsearch groupdicttupler)shebangr/s& r"rInterpreter.parse~sT ""7+I!!#   %fY&7&=&=&? @F9  r%c <\T;'g VP4pVPR8XdRpMFV\R4,'d RV,pM$V\R4,'d RV,pMRpV'd RV,pV'd R V: V: 2pV#) agReturn path to site-packages directory. Note that returned path is not the final location of .py files >>> i = Interpreter('python') >>> i.sitedir(version='3.1') '/usr/lib/python3/dist-packages/' >>> i.sitedir(version='2.5') '/usr/lib/python2.5/site-packages/' >>> i.sitedir(version=Version('2.7')) '/usr/lib/python2.7/dist-packages/' >>> i.sitedir(version='3.1', gdb=True, package='python3-foo') 'debian/python3-foo/usr/lib/debug/usr/lib/python3/dist-packages/' >>> i.sitedir(version=Version('3.2')) '/usr/lib/python3/dist-packages/' >>> Interpreter('pypy').sitedir(version='2.0') '/usr/lib/pypy/dist-packages/' r'z/usr/lib/pypy/dist-packages/2.6z /usr/lib/python%s/site-packages/z3.0z /usr/lib/python%s/dist-packages/z/usr/lib/python3/dist-packages/z/usr/lib/debug%szdebian/)rrr)r gdbpackagerrs&&&& r"sitedirInterpreter.sitedirs&'11T\\2 99 1D  & &5?D  & &5?D4D %,D 7$+T2D r%c  H\T;'g VP4pRVP9dRMRpV\R48:d W,#\V4wrEVP R4'g VR, p\ VRVRR : RVP V4: RV: 24#) a^Given path to a .py file, return path to its .pyc/.pyo file. This function is inspired by Python 3.2's imp.cache_from_source. :param fpath: path to file name :param version: Python version >>> i = Interpreter('python') >>> i.cache_file('foo.py', Version('3.1')) 'foo.pyc' >>> i.cache_file('bar/foo.py', '3.2') 'bar/__pycache__/foo.cpython-32.pyc' z-Ooc3.1z.py __pycache__Nr)rrrrendswithr magic_tag)r fpathr last_charfdirfnames&&& r" cache_fileInterpreter.cache_files'11T\\24<</CS gen $$ $El ~~e$$ UNED-3BZ!8)*EF Fr%c \T;'g VP4pVPV4wr4VPR^4^,pV'd9VRP V4, pV'dVRP V4, pVP 'd3VP R8Xd"V\R4,'d VR, pRP V4#)z5Return extension name with soname and multiarch tags.rz.{}z-{}r 3_dz{}.so)rr _get_configrr8rr)r rrsoabi multiarchr/s&&& r"ext_fileInterpreter.ext_files'11T\\2++G4C#A&  ell5) )F%,,y11 :::$))y0ws|++ dNF~~f%%r%c \T;'g VP4pVPR8XdV\R4,'dR#VPRV4p\ V4#)zReturn magic number.r rWrz9import importlib.util; print(importlib.util.MAGIC_NUMBER))rrr_executeeval)r rr/s&& r" magic_numberInterpreter.magic_numbersQ'11T\\2 99 !g&=&=Z\cdF|r%c \T;'g VP4pVPR8XdV\R4,'dR#VPRV4#)zReturn Python magic tag (used in __pycache__ dir to tag files). >>> i = Interpreter('python') >>> i.magic_tag(version='3.2') 'cpython-32' r 3.2rz/import sys; print(sys.implementation.cache_tag))rrrr_r9s&&r"rOInterpreter.magic_tagsJ'11T\\2 99 !g&?&?}}NPWXXr%c \T;'g VP4pVPV4wr#V# \d\P RRR7R#i;i)zReturn multiarch tag.zcannot get multiarchTexc_inforrrrY Exceptionlogrr rrZr[s&& r"r[Interpreter.multiarchs]'11T\\2 #//8 E    II,tI < 6"AAc\T;'g VP4pVPR8Xd6V\R4, 'dRPVP4#R#R#)r rdzabi{}N)rrrr8majorr9s&&r" stableabiInterpreter.stableabisN'11T\\2 99 !g&?&?>>'--0 0'@ !r%c \T;'g VP4pVPV4wr#V# \d\P RRR7R#i;i)z{Return SOABI flag (used to in .so files). >>> i = Interpreter('python') >>> i.soabi(version=Version('3.3')) 'cpython-33m' zcannot get soabiTrgrrirls&& r"rZInterpreter.soabi s^'11T\\2 #//8 E    II(4I 8 rnc J\T;'g VP4pRV9dVPR^4wr1MRp\P V4pV'gR#VP 4pVR,'dR#\ WR7pVR,'d4RPVR,^,VR,^,4VnVP'g/VR,'gR VR ,;'gR9dR VnVP4wrgTR,pTPR8Xd6TPR, 'dTPR4'dTRRpTR,'g T'd\RPYR,;'gT4pTR,'g T'd#RPYR,;'gT4pTR, pY8XdR#\Y84# \d\PR R R 7R#i;i)aPReturn extension file name if file can be renamed. >>> i = Interpreter('python') >>> i.check_extname('foo.so', version='3.3') # doctest: +ELLIPSIS 'foo.cpython-33m-....so' >>> i.check_extname('foo.abi3.so', version='3.3') >>> i.check_extname('foo/bar/bazmodule.so', version='3.3') # doctest: +ELLIPSIS 'foo/bar/baz.cpython-33m-....so' /rNrq)rverz{}.{}rdflagsTzcannot get soabi/multiarchrgrr rdmodulerZr[z{}-{}z.soi)rrrsplit EXTFILE_REr=r>rr8rrYrjrkrrNr) r rSrrRinfoirZr[r/s &&& r" check_extnameInterpreter.check_extnames'11T\\2 %<,,sA.KD%D  ' ~~      . ;;tE{1~tE{1~FAIwwwDMMST']5H5Hb-IAG  }} Ef 66Y 199#5#5&//(:S:SCR[F ==E^^FM,B,BUCFK  I [0A0N0NYO% ? D!!  II2TI B  s G<<"H"!H"c\T;'g VP4pVPR8XgFVPR8Xd8VR, 'dVR,'gVR, 'gVR8XdRpMRpVR, pVPW!4P R4p\ P R ,V^&V# \dT#i;i) r'r rCrWrKzimport sysconfig as s;z%from distutils import sysconfig as s;zOprint("__SEP__".join(i or "" for i in s.get_config_vars("SOABI", "MULTIARCH")))__SEP__DEB_HOST_MULTIARCH)rrrr_rosenvironKeyError)r rcmd conf_varss&& r"rYInterpreter._get_configKs'11T\\2 99 $))y"85  W^^e##w#~*C9C D DMM#/55i@  ::&:;IaL   s%C CCc6\T;'g VP4pVPV4RV3pV'd8WPP9dVPPV,#\ V4pVR,^8wd>\ PVR,4\RPWR,44hVR,P4p\V4^8Xd V^,pV'dWPPPV&V#)z-c returncodestderrz{} failed with status code {}stdout) rrr. __class___cacherrkrrjr8 splitlineslen)r commandrcacheoutputr/s&&&& r"r_Interpreter._execute^s'11T\\2::g&g6 W 5 55>>((1 1! , 1 $ IIfX& ';BB7S_L`ab b!,,. v;! AYF -3NN ! !' * r%)NNNNNNN)FNNr3)NT)__name__ __module__ __qualname____firstlineno__rrrrrrrr#r*r0r4r. staticmethodrrFrTr\rarOr[rqrZrrYr___static_attributes____classdictcell__) __classdict__s@r"rr<s D DG E DG F$*( (0$LF2 & Y 1 "/"b&r%r)loggingrreos.pathrr debpythonrdebpython.versionrcompileVERBOSEr<r| getLoggerrrkrrr%r"rsq* % ZZ    ZZ jj! "!uur%