පයිතන් අර්ථ නිරූපණය කරන්නේ නම් .pyc ගොනු යනු කුමක්ද?


1105

පයිතන් යනු අර්ථකථනය කරන ලද භාෂාවක් බව තේරුම් ගැනීමට මට ලබා දී ඇත ...
කෙසේ වෙතත්, මගේ පයිතන් ප්‍රභව කේතය දෙස බලන විට .pycවින්ඩෝස් "සම්පාදිත පයිතන් ලිපිගොනු" ලෙස හඳුනාගන්නා ලිපිගොනු මට පෙනේ .

මේවා පැමිණෙන්නේ කොහෙන්ද?


3
සාධාරණීකරණය කිරීම සඳහා stackoverflow.com/questions/11433579/… බලන්න . එක වචනයකින්: වේගය.
user7610



පයිතන්හි පවා ජාවා මෙන් 'එක් වරක් ලියන්න, ඕනෑම තැනක දුවන්න' යන්නෙන් අදහස් වේද?
Mrak Vladar

2
RaMrakVladar පවා ජාවා යනු "වරක් ලියන්න, ඕනෑම තැනක ධාවනය කරන්න [ඔබට JVM ඇති බව]". පයිතන් වෙනස් නොවේ; එය "ඔබට පයිතන් අතථ්‍ය යන්ත්‍රයක් ඇති ඕනෑම තැනක ධාවනය කරන්න". විශාල වෙනසක් බොහෝ Python නිර්මාණයන් වෙනුවට මෙන් ඔවුන්ට වෙන් වඩා, සම්පාදක හා එක් යෙදවිය බවට භාෂණ ඒකාබද්ධ බව ය javaසහ javac.
චෙප්නර්

Answers:


673

ඒවායේ බයිට් කේතය අඩංගු වන අතර එය පයිතන් පරිවර්තකය ප්‍රභවය සම්පාදනය කරයි. මෙම කේතය පසුව ක්‍රියාත්මක කරනු ලබන්නේ පයිතන්ගේ අථත්‍ය යන්ත්‍රය මගිනි.

පයිතන්ගේ ලියකියවිලි මෙවැනි අර්ථ දැක්වීම පැහැදිලි කරයි:

පයිතන් යනු සම්පාදනය කරන ලද භාෂාවකට වඩා අර්ථකථනය කරන ලද භාෂාවකි, නමුත් බයිට් කේත සම්පාදකයා සිටීම නිසා වෙනස බොඳ විය හැකිය. මෙයින් අදහස් කරන්නේ ක්‍රියාත්මක කළ හැකි දේ නිර්මාණය නොකර ප්‍රභව ගොනු කෙලින්ම ක්‍රියාත්මක කළ හැකි බවයි.


10
සිත්ගන්නාසුළු, ස්තූතියි. පයිතන් තනිකරම අර්ථකථනය කරන ලද භාෂාවක් ලෙස සලකන්නේද?
froadie

195
rod ෆ්‍රෝඩි: භාෂාවක් “අර්ථ නිරූපණය” හෝ “සම්පාදනය” නොකෙරේ. ඒ විශේෂිත ක්රියාත්මක පරිවර්තකයෙකු හෝ සම්පාදක (හෝ දෙමුහුන් හෝ JIT සම්පාදක) විය හැක.
ජෝකිම් සෝවර්

30
'සම්පාදනය' කළ එක් පරීක්ෂණයක්: එය සම්පාදනය කර ඇත්තේ සැබෑ යන්ත්‍ර උපදෙස් වලටද? පයිතන් බයිට් කේතය යන්ත්‍ර උපදෙස් නොවන අතර ජාවා 'ජේවීඑම්' උපදෙස් ද නොවේ, එබැවින් මෙම භාෂා දෙකම එම අර්ථ දැක්වීම මගින් සම්පාදනය නොකෙරේ. නමුත් දෙකම අතරමැදි 'වියුක්ත යන්ත්‍ර' කේතයකට 'සම්පාදනය' කර ඇති අතර, දෙකම ප්‍රභව කේතය සෘජුව අර්ථ නිරූපණය කිරීමෙන් වැඩසටහන ක්‍රියාත්මක කිරීමට වඩා වේගවත් වේ (පැරණි පාසල් බේසික් කරන්නේ එයයි).
greggo

20
ව්‍යාකූල වීමට නම්, 'සම්පාදනය' යනු 'පරිවර්තනය' යන්නයි. පයිතන් පසුව බයිට් කේතයකට සම්පාදනය කරනු ලැබේ. AFAIK, Bash පමණක් සැබවින්ම අර්ථ නිරූපණය කර ඇත, අනෙක් සියලුම ජනප්‍රිය "අර්ථකථනය" කරන ලද භාෂා සියල්ලම බයිටකෝඩ් එකකට සම්පාදනය කර ඇත.
bfontaine

13
ඇත්තටම, ඔවුන් යන්ත්ර උපදෙස් පමණක් නොව, දේශීය සත්කාරක භෞතික CPU සඳහා යන්ත්ර උපදෙස්. එබැවින් අප එය VM ලෙස හඳුන්වන්නේ ඇයි? එකලස් කිරීමේ භාෂාව සඳහා එස්පෙරාන්තෝ මෙන්. වර්තමානයේ අප සතුව ප්‍රබන්ධ (නමුත් තවමත් අනුකරණය කරන ලද) CPU සඳහා ස්වදේශික කේතයක් ඇත (ළමයින් උනන්දු කරවීමට මොජාන්ග්ගේ උත්සාහය). රෙක්ස් සැබවින්ම අර්ථ නිරූපණය කරන ලද අතර BAT සහ CMD (සහ DCL) අර්ථ නිරූපණය කෙරේ.
mckenzm

1006

පයිතන් අර්ථකථනය කරන භාෂාවක් බව තේරුම් ගැනීමට මට ලබා දී ඇත ...

(ජනප්‍රිය) භාෂා මට්ටම් පිළිබඳ වරදවා වටහා ගැනීමක් මත මෙම ජනප්‍රිය සටහන වැරදියි, නැතහොත්, ගොඩනඟා ඇත: ඒ හා සමාන වැරැද්දක් වනුයේ “බයිබලය දැඩි ආවරණ පොතක්” යැයි පැවසීමයි. මට එම උපමාව පැහැදිලි කිරීමට ඉඩ දෙන්න ...

"බයිබලය" එය යන අර්ථය "පොතක්" වන පන්තියේ පොත් (හඳුනාගෙන සැබෑ, භෞතික වස්තූන්) ෙකොපමණද; “බයිබලයේ පිටපත්” ලෙස හඳුනාගෙන ඇති පොත්වල මූලික වශයෙන් පොදු යමක් තිබිය යුතුය (අන්තර්ගතය, විවිධ භාෂාවලින් වුවද, විවිධ පිළිගත හැකි පරිවර්තන, පාද සටහන් මට්ටම් සහ වෙනත් විවරණ සහිත) - කෙසේ වෙතත්, එම පොත් බව අංශ පිළිබඳව දහසකුත් එකක් වෙනස් කිරීමට සුවපත් ඉඩ නෑ බන්ධන, බන්ධන වර්ණ මුද්රණය කළ මුද්රණ උපමා ඕනෑම නම්, පුළුල්, ලිවිය-හැකි ගොනුවක් ආන්තිකයන් හෝ builtin පිටු සලකුණු කිරීම නොව, අංක සහ වර්ග භාවිතා අකුරු (ව) ආකාරයේ - මූලික සලකා , සහ එසේ ය.

එය බව ඉතා හැකි ය සාමාන්ය බයිබලය මුද්රණය සැබවින්ම බන්ධන වයස දොළහයි දී වනු ඇත - සියලු පසු, එය ද ස්ථාන කිහිපයක සිද්දියක් ලබා පරිච්ඡේදය-සහ-පදය සූචක සොයමින් හරහා thumbed සාමාන්යයෙන් පුරා කියවිය අදහස් හා හා පුරා කියලා පොතක්, තියෙන්නේ , යනාදිය යනාදිය, සහ හොඳ දෘ c ආවරණයක් මගින් ලබා දුන් පිටපතක් එවැනි භාවිතය යටතේ දිගු කල් පවතිනු ඇත. කෙසේ වෙතත්, මේවා ලෞකික (ප්‍රායෝගික) ගැටළු වන අතර, දී ඇති සත්‍ය පොත් වස්තුවක් බයිබලයේ පිටපතක් ද නැද්ද යන්න තීරණය කිරීමට භාවිතා කළ නොහැක: කඩදාසි මුද්‍රණ මුද්‍රණය පරිපූර්ණ ලෙස කළ හැකි ය!

ඒ හා සමානව, පයිතන් යනු භාෂා ක්‍රියාත්මක කිරීමේ පන්තියක් නිර්වචනය කිරීමේ අර්ථයෙන් “භාෂාවක්” වන අතර ඒවා සියල්ලම මූලික කරුණු වලට සමාන විය යුතුය (වාක්‍ය ඛණ්ඩය, බොහෝ සෙයින් අර්ථකථන, ඒවා පැහැදිලිවම වෙනස් වීමට ඉඩ දී ඇති කොටස් හැර) නමුත් සම්පූර්ණයෙන්ම අවසර ඇත සෑම "ක්‍රියාවට නැංවීමේ" විස්තරයකින්ම වෙනස් වීමට - ඔවුන් ලබා දී ඇති ප්‍රභව ලිපිගොනු සමඟ ඔවුන් කටයුතු කරන්නේ කෙසේද, ඒවා ප්‍රභවයන් සමහර පහළ මට්ටමේ ආකෘති වලට සම්පාදනය කරන්නේද යන්න (සහ, එසේ නම්, කුමන ස්වරූපය - සහ ඒවා සුරකින්නේද යන්න ඇතුළුව) සම්පාදනය කරන ලද ආකෘති, තැටියට හෝ වෙනත් තැනකට), එම ආකෘති ක්‍රියාත්මක කරන ආකාරය සහ යනාදිය.

සම්භාව්‍ය ක්‍රියාත්මක කිරීම වන සීපයිතන් බොහෝ විට කෙටියෙන් “පයිතන්” ලෙස හැඳින්වේ - නමුත් එය මයික්‍රොසොෆ්ට් හි අයන්පයිතන් (සීඑල්ආර් කේත සමඟ සම්පාදනය වන, එනම් “.නෙට්”), ජයිතන් සමඟ පැත්තෙන් නිෂ්පාදන-ගුණාත්මක ක්‍රියාත්මක කිරීම් කිහිපයකින් එකකි. . ඒවා සියල්ලම පයිතන් (== "පයිතන් භාෂාව ක්‍රියාත්මක කිරීම") මෙන්ම මතුපිටින් වෙනස් පොත් වස්තු සියල්ලම බයිබල් විය හැකිය (== "බයිබලයේ පිටපත්").

ඔබ විශේෂයෙන් CPython ගැන උනන්දුවක් දක්වන්නේ නම්: එය ප්‍රභව ලිපිගොනු පයිතන් විශේෂිත පහළ මට්ටමේ ආකෘතියකට ("බයිට්කෝඩ්" ලෙස හැඳින්වේ) සම්පාදනය කරයි, අවශ්‍ය විට එය ස්වයංක්‍රීයව කරයි (ප්‍රභව ගොනුවකට අනුරූපව බයිට් කේත ගොනුවක් නොමැති විට, හෝ බයිට්කෝඩ් ගොනුව ප්‍රභවයට වඩා පැරණි හෝ වෙනත් පයිතන් අනුවාදයකින් සම්පාදනය කර ඇත), සාමාන්‍යයෙන් බයිට්කෝඩ් ගොනු තැටියට සුරකිනු ඇත (අනාගතයේදී ඒවා නැවත සකස් කිරීම වළක්වා ගැනීමට). OTOH IronPython සාමාන්‍යයෙන් CLR කේතයන් (ඒවා තැටියට සුරැකීම හෝ නොකිරීම මත පදනම්ව) සහ Jython සිට JVM කේත වලට සම්පාදනය කරනු ඇත (ඒවා තැටියට සුරැකීම හෝ නොකිරීම - එය .classසුරැකුවහොත් එය දිගුව භාවිතා කරයි ).

මෙම පහළ මට්ටමේ ආකෘති පසුව “පරිවර්තකයන්” ලෙසද හඳුන්වන සුදුසු “අථත්‍ය යන්ත්‍ර” මඟින් ක්‍රියාත්මක කරනු ලැබේ - සීපයිතන් වීඑම්, .නෙට් ධාවන කාලය, ජාවා වීඑම් (ජේවීඑම්), සුදුසු පරිදි.

ඉතින්, මේ අර්ථයෙන් ගත් කල (සාමාන්‍ය ක්‍රියාත්මක කිරීම් කරන්නේ කුමක්ද), පයිතන් යනු “අර්ථකථනය කරන ලද භාෂාවක්” නම්, සී # සහ ජාවා නම් පමණක් වේ: ඒ සියල්ලටම පළමුව බයිට් කේතය නිපදවීමේ සාමාන්‍ය ක්‍රියාත්මක කිරීමේ උපාය මාර්ගයක් ඇත, පසුව එය වීඑම් / පරිවර්තකය හරහා ක්‍රියාත්මක කරන්න .

සම්පාදනය කිරීමේ ක්‍රියාවලිය කෙතරම් “බර”, මන්දගාමී හා ඉහළ උත්සවයක් ද යන්න කෙරෙහි වැඩි අවධානයක් යොමු කෙරේ. CPython නිර්මාණය කර ඇත්තේ හැකි තරම් වේගයෙන්, සැහැල්ලු ලෙස, හැකි තරම් කුඩා උත්සවයක් සමඟිනි - සම්පාදකයා ඉතා සුළු දෝෂ පරික්ෂා කිරීම සහ ප්‍රශස්තිකරණය කරයි, එබැවින් එය වේගයෙන් හා කුඩා මතක ප්‍රමාණයකින් ධාවනය කළ හැකි අතර එමඟින් එය ඉඩ දෙයි අවශ්‍ය විටෙක ස්වයංක්‍රීයව හා විනිවිදභාවයෙන් යුතුව ධාවනය කරන්න, බොහෝ විට සම්පාදනයක් සිදුවන බව පරිශීලකයා දැන සිටිය යුතු නැත. ජාවා සහ සී # සාමාන්‍යයෙන් සම්පාදනයේදී වැඩි වැඩ ප්‍රමාණයක් භාරගනී (එබැවින් ස්වයංක්‍රීය සම්පාදනය සිදු නොකරන්න) දෝෂ වඩාත් හොඳින් පරීක්ෂා කර වඩාත් ප්‍රශස්තිකරණය සිදු කිරීම සඳහා. එය අළු කොරපොතු වල අඛණ්ඩ පැවැත්මක් මිස කළු හෝ සුදු තත්වයක් නොවේ,


2
ලස්සන පිළිතුර. අවසාන ඡේදයට කුඩා නිවැරදි කිරීමක් පමණි: පයිතන් නිර්මාණය කර ඇත්තේ හැකි තරම් වේගයෙන් (ආදිය) සම්පාදනය කිරීමට ය. ස්ථිතික වර්ගයේ පද්ධතියක් සහ දේවල් නොමැති වීම නිසා මෙවර එය ඇත්ත වශයෙන්ම භාෂාවයි. මිනිසුන් "පරිවර්ථනය කළ" භාෂාවන් ගැන කතා කරන විට, ඔවුන් සාමාන්‍යයෙන් අදහස් කරන්නේ "ගතික" භාෂා ය.
එලසාර්

2
La එලසාර්, ඇත්ත වශයෙන්ම, පයිපයි වැනි අනෙකුත් ක්‍රියාත්මක කිරීම්, සම්පාදනය කිරීමට ඉක්මන් නොවන, ස්ථිතික යතුරු ලියනය කිරීමේ lack නතාවයෙන් අවශ්‍ය වඩාත් ගැඹුරු විශ්ලේෂණයක් සිදු කිරීමට සහ යන්ත්‍ර කේතයට නියමිත වේලාවට සම්පාදනය කිරීම (මේ අනුව වේගවත් වේ දිගු කාලීන වැඩසටහන් බොහෝ වාරයක් දක්වා).
ඇලෙක්ස් මාටෙලි

සයිතන් මෙහි ගැලපෙන්නේ කොතැනටද? ඔබ එය වෙනත් භාෂාවක් ලෙස සලකනවාද? නැතහොත් එය පයිතන් ක්‍රියාත්මක කිරීමක්ද? පයිතන්ගේ වීඑම් බොහෝ විට එහි “පරිවර්තකයා” ලෙස හඳුන්වනු ලබන නිසා මෙම “අර්ථ නිරූපණය” එදිරිව සම්පාදනය කර ඇත්තේ පාරිභාෂිත ව්‍යාකූලතාවයක් ද? JVM හෝ .NET ධාවන කාල පරිවර්තකයන් ඇමතීම වලංගු වේ. ඔවුන් දෙදෙනාම බොහෝ විට බයිට් කේතය JIT යන්ත්‍ර කේතයට පරිවර්ථනය කරති (සමහර හැඹිලි ප්‍රශස්තිකරණ හැර)
ඩාවෝස්

184

අර්ථකථනය කරන භාෂාවක් වැනි දෙයක් නොමැත. පරිවර්තකයෙකු හෝ සම්පාදක භාවිතා යන්න හුදු පිලිබඳ තහංචිය ක්රියාත්මක කිරීම හා පරම භාෂාව සමග මොනම සම්බන්ධයක් හෝ කිසිවක් නැත.

සෑම භාෂාවක්ම පරිවර්තකයෙකු හෝ සම්පාදකයෙකු විසින් ක්‍රියාත්මක කළ හැකිය. භාෂාවන්ගෙන් අතිමහත් බහුතරයකට එක් එක් වර්ගයට අවම වශයෙන් එක් ක්‍රියාත්මක කිරීමක් ඇත. .

භාෂාවක් යනු වියුක්ත ගණිතමය නීති සමූහයකි. පරිවර්තකය යනු භාෂාවක් සඳහා ක්‍රියාත්මක කිරීමේ ක්‍රමෝපායන් කිහිපයකින් එකකි. ඔවුන් දෙදෙනා ජීවත් වන්නේ සම්පූර්ණයෙන්ම වෙනස් වියුක්ත මට්ටම්වල ය. ඉංග්‍රීසි ටයිප් කළ භාෂාවක් නම්, “පරිවර්ථනය කළ භාෂාව” යන වචනය වර්ග දෝෂයකි. “පයිතන් යනු අර්ථකථනය කරන ලද භාෂාවක්” යන ප්‍රකාශය හුදෙක් අසත්‍යයක් නොවේ (මක්නිසාද යත්, එම ප්‍රකාශය වැරදිසහගත වුවද එම ප්‍රකාශය අර්ථවත් වන බව අඟවන බැවිනි), එය සරලවම තේරුමක් නැත , මන්ද භාෂාවක් කිසි විටෙකත් අර්ථ දැක්විය නොහැක "අර්ථ නිරූපණය."

විශේෂයෙන්, ඔබ දැනට පවතින පයිතන් ක්‍රියාත්මක කිරීම් දෙස බැලුවහොත්, ඔවුන් භාවිතා කරන ක්‍රියාත්මක කිරීමේ උපාය මාර්ග මේවා ය:

  • අයන්පයිතන්: ඩීඑල්ආර් ගස් සමඟ සම්පාදනය කරන අතර පසුව ඩීඑල්ආර් සීඅයිඑල් බයිට් කේතයට සම්පාදනය කරයි. සීඅයිඑල් බයිට් කේතයට කුමක් සිදුවේද යන්න ඔබ ක්‍රියාත්මක වන්නේ කුමන සීඑල්අයි වීඑස් මතද යන්න මත රඳා පවතී, නමුත් මයික්‍රොසොෆ්ට් .නෙට්, ග්නූ පෝටබල්.නෙට් සහ නොවෙල් මොනෝ අවසානයේ එය ස්වදේශීය යන්ත්‍ර කේතයට සම්පාදනය කරනු ඇත.
  • ජයිතන්: උණුසුම් කේත මාර්ග හඳුනා ගන්නා තෙක් පයිතන් ප්‍රභව කේතය අර්ථ නිරූපණය කරයි, පසුව එය ජේවීඑම්එල් බයිට් කේතයට සම්පාදනය කරයි. ජේවීඑම්එල් බයිට් කේතයට කුමක් සිදුවේද යන්න ඔබ ක්‍රියාත්මක වන්නේ කුමන ජේවීඑම් මතද යන්න මත රඳා පවතී. උණුසුම් කේත මාර්ග හඳුනා ගන්නා තෙක් මැක්සීන් එය සෘජුවම ප්‍රශස්තිකරණය නොකළ ස්වදේශීය කේතයට සම්පාදනය කරනු ඇත, පසුව එය ප්‍රශස්ත දේශීය කේතයට නැවත සම්පාදනය කරයි. හොට්ස්පොට් විසින් මුලින්ම ජේවීඑම්එල් බයිට් කේතය අර්ථ නිරූපණය කර අවසානයේදී උණුසුම් කේත මාර්ග ප්‍රශස්තිකරණය කළ යන්ත්‍ර කේතයට සම්පාදනය කරනු ඇත.
  • PyPy: PyPy bytecode සමඟ සම්පාදනය කරයි, එය PyPy VM විසින් අර්ථකථනය කරනු ලබන අතර එය උණුසුම් කේත මාර්ග හඳුනා ගන්නා තෙක් එය දේශීය කේත, JVML බයිට්කෝඩ් හෝ CIL බයිට්කෝඩ් සමඟ සම්පාදනය කරයි.
  • CPython: එය අර්ථ නිරූපණය කරන CPython බයිට් කේතයට සම්පාදනය කරයි.
  • සිරස් රහිත පයිතන්: එය අර්ථ නිරූපණය කරන CPython බයිට් කේතයට සම්පාදනය කරයි.
  • නොකැඩූ ගිලීම: සීපයිතන් බයිට් කේතයට සම්පාදනය කරන අතර එය උණුසුම් කේත මාර්ග හඳුනා ගන්නා තෙක් එය අර්ථ නිරූපණය කරයි. පසුව එය එල්එල්වීඑම් අයිආර් සමඟ සම්පාදනය කරන අතර එය එල්එල්වීඑම් සම්පාදකයා ස්වදේශීය යන්ත්‍ර කේතයට සම්පාදනය කරයි.
  • සයිතන්: පයිතන් කේතය අතේ ගෙන යා හැකි සී කේතයට සම්පාදනය කරයි, එය සම්මත සී සම්පාදකයෙකු සමඟ සම්පාදනය කෙරේ
  • Nuitka: පයිතන් කේතය යන්ත්‍ර මත යැපෙන C ++ කේතයට සම්පාදනය කරයි, එය සම්මත C සම්පාදකයෙකු සමඟ සම්පාදනය කෙරේ

එම ලැයිස්තුවේ ඇති සෑම ක්‍රියාවට නැංවීමකටම (කුඩා, ෂෙඩ්ස්කින් හෝ සයිකෝ වැනි මා සඳහන් නොකළ තවත් සමහරක්) සම්පාදකයක් ඇති බව ඔබට පෙනෙනු ඇත. ඇත්ත වශයෙන්ම, මා දන්නා පරිදි, දැනට අර්ථ නිරූපණය කර ඇති පයිතන් ක්‍රියාත්මක කිරීමක් නොමැත, එවැනි ක්‍රියාත්මක කිරීමක් සැලසුම් කර නොමැති අතර කිසි විටෙකත් එවැනි ක්‍රියාත්මක කිරීමක් සිදු වී නොමැත.

"අර්ථකථනය කරන ලද භාෂාව" යන යෙදුම අර්ථවත් නොවනවා පමණක් නොව, ඔබ එය "අර්ථ නිරූපණය කරන ලද භාෂාව" යන අර්ථය ලෙස අර්ථකථනය කළද, එය පැහැදිලිවම සත්‍ය නොවේ. කවුරුන් ඔබට එය පැවසුවද, ඔහු කතා කරන්නේ කුමක් දැයි නොදනී.

විශේෂයෙන්, .pycඔබ දකින ලිපිගොනු CPython, Stackless Python හෝ Unladen Swallow විසින් නිපදවන ලද හැඹිලි බයිට් කේත ගොනු වේ.


6
MSBASIC වැනි පැරණි පාසල් මූලික අතරමැදි ආකාරයක් නොතිබුණි. වැඩසටහන සෘජුවම ප්‍රභව ආකෘතියෙන් (හෝ ආසන්න මූලාශ්‍රයෙන්, 1-බයිට් ටෝකන මගින් මූල පද නිරූපණය කරන ලද ආකෘතියක් වන අතර, # පේළියේ බයිට් ද්විමය අඟල් වලින් නිරූපණය කර ඇත, නමුත් ඉතිරිය ASCII පමණි). එබැවින් ඇත්ත වශයෙන්ම 'ගොටෝ' ගැලපෙන ගමනාන්තය සෙවීම සඳහා කොපමණ ප්‍රභව රේඛා සෙවිය යුතුද යන්න මත පදනම්ව විවිධ කාලයක් ගතවනු ඇත. * B-2 * cos (x) වැනි ප්‍රකාශන ක්‍රියාත්මක කරන සෑම අවස්ථාවකම effectively ලදායී ලෙස නැවත විග්‍රහ කරන ලදි.
greggo

4
@greggo: ඔබට තවත් පැරණි පාසලකට යාමට අවශ්‍ය නම් , BASIC හි මුල් පිටපත ස්වදේශීය කේත සම්පාදකයෙකි. “සම්පාදනය කරන ලද” හෝ “අර්ථකථනය කරන ලද” භාෂාවක සංකල්පය කෙතරම් හාස්‍යජනකද යන්න මෙයින් සනාථ විය යුතුය.
J Wrg W Mittag

විවිධ පයිතන් සම්පාදකයින් / පරිවර්තකයන් හැසිරෙන ආකාරය පැහැදිලි කිරීමට ස්තූතියි. කාර්යක්ෂම සී හෝ ජාවාස්ක්‍රිප්ට් ජනනය කරන හොඳ පයිතන් සම්පාදකයින් තවමත් සිටීදැයි මම කල්පනා කරමි. එය ඉතා කළ හැකි දෙයක් ලෙස පෙනේ, සමහර විට මහා පරිභෝජනය සඳහා නොව, අවම වශයෙන් පයිතන්ගේ සාධාරණ උප කුලකයක් සඳහා ය. සයිතන් යනු කුමක්දැයි මම කල්පනා කරමි.
personal_cloud

Cython 2009 SciPy සඳහන් කරන ලදී, නමුත් මම (මෙහි මම පමණක් දැන් ඒ ගැන ඉගෙන 2017 දී මම) ආපසු 2010 දී ඒ ගැන නොදැන මම ඔබට සමාව ගත හැක. තවමත් අපි ජාවාස්ක්‍රිප්ට් උදාහරණයක් සොයා ගත යුතුයි ... ජයිතන් මට කිසිම තේරුමක් නැහැ (2009 වන විට ජාවා දැනටමත් මිය ගොස් නැද්ද? හොඳයි හ්ම්, සමහර විට එසේ නොවේ ... සී ++ තල්ලුව එතරම් හොඳ නොවීය)
personal_cloud

1
Personalpersonal_cloud: මම ඔබේ අදහස එතරම් අනුගමනය නොකරමි. ඔව්, ඇත්ත වශයෙන්ම, මම සයිතන් ගැන දනිමි, නමුත් එයට කිසිවක් සම්බන්ධ වන්නේ කුමක් ද? එය පයිතන් ක්‍රියාත්මක කිරීමක් නොවේ, එය සම්පූර්ණයෙන්ම වෙනස් භාෂාවකි. එසේම, ජාවාස්ක්‍රිප්ට් උදාහරණයක් සොයා ගැනීම ඇත්තෙන්ම අපහසු නැත, ඇත්ත වශයෙන්ම, දැනට පවතින සියලුම ප්‍රධාන ධාරාවේ ජාවාස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම් සම්පාදකයින් ඇත. අවසාන වශයෙන්, ජයිතන් යනු පයිතන් වෙනත් ඕනෑම ක්‍රියාත්මක කිරීමක් මෙන් පයිතන් ක්‍රියාත්මක කිරීමකි. තවද එය ජාවා වේදිකාවේ වෙනත් ඕනෑම භාෂා ක්‍රියාත්මක කිරීමක් මෙන් ජාවා වේදිකාවේ භාෂාවක් ක්‍රියාත්මක කිරීමකි.
ජෝර්ග් ඩබ් මිට්ටාග්

63

.pyගොනුවක් ආනයනය කරන විට මේවා නිර්මාණය කරනු ලබන්නේ පයිතන් පරිවර්තකය වන අතර, ආනයනික මොඩියුලයේ / වැඩසටහනේ “සම්පාදනය කරන ලද බයිට් කේතය” එහි අඩංගු වේ, අදහස නම් ප්‍රභව කේතයේ සිට බයිට් කේතයට “පරිවර්තනය” (එය කළ යුත්තේ එක් වරක් පමණි) අනුරූප ගොනුවට වඩා අළුත් importනම් පසුකාලීනව මඟ හැරිය හැක, එබැවින් ආරම්භය ටිකක් වේගවත් කරයි. නමුත් එය තවමත් අර්ථ නිරූපණය කර ඇත..pyc.py


10
සැබෑ. බොහෝ මූලික පයිතන් පුස්තකාල හැරුණු විට සී වලින් ලියා ඇත. එබැවින් පයිතන් ධාවනයේ කොටස් අර්ථ නිරූපණය කර ඇත, සී හි කොටස ක්‍රියාත්මක වේ. ඔබේ කාර්ය සාධනය සංවේදී කේත බිටු වලටද ඔබට එය කළ හැකිය.
bwawok

45

පැටවීමේ මොඩියුල වේගවත් කිරීම සඳහා, පයිතන් .pyc හි මොඩියුලවල සම්පාදනය කළ අන්තර්ගතය රඳවා ගනී.

CPython එහි ප්‍රභව කේතය "බයිට් කේතය" ලෙස සම්පාදනය කරන අතර කාර්ය සාධන හේතූන් මත, ප්‍රභව ගොනුවේ වෙනස්කම් ඇති සෑම අවස්ථාවකම එය ගොනු පද්ධතියේ මෙම බයිට් කේතය රඳවා ගනී. මෙමඟින් පයිතන් මොඩියුල පැටවීම වඩා වේගවත් කරයි, මන්දයත් සම්පාදක අවධිය මඟ හැරිය හැකි බැවිනි. ඔබේ ප්‍රභව ගොනුව foo.py වන විට, සීපයිතන් ප්‍රභවයට යාබදව foo.pyc ගොනුවක බයිට් කේතය රඳවා ගනී.

පයිතන් 3 හි, සෑම පයිතන් පැකේජ නාමාවලියක් තුළම තනි බහලුමක බයිට් කේත හැඹිලි ලිපිගොනු ලිවීමට හා සෙවීමට පයිතන්ගේ ආනයන යන්ත්‍ර සූත්‍ර පුළුල් කර ඇත. මෙම නාමාවලිය __pycache__ ලෙස හැඳින්වේ.

මොඩියුල පටවන ආකාරය විස්තර කරන ප්‍රවාහ සටහනක් මෙන්න:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

වැඩි විස්තර සඳහා:

ref: PEP3147
ref: “සම්පාදනය කරන ලද” පයිතන් ගොනු


40

මෙය ආරම්භකයින් සඳහා වේ,

පයිතන් ස්වයංක්‍රීයව ඔබේ ස්ක්‍රිප්ට් එක ක්‍රියාත්මක කිරීමට පෙර සම්පාදනය කරන ලද කේතයට සම්පාදනය කරයි.

ස්ක්‍රිප්ටයක් ධාවනය කිරීම ආනයනයක් ලෙස නොසැලකෙන අතර .pyc නිර්මාණය නොවේ.

උදාහරණයක් ලෙස, ඔබ විසින් විධානාවලි ගොනුවක් තිබේ නම් abc.py ආනයන තවත් මොඩියුලය බව xyz.py , ඔබ ක්රියාත්මක කරන විට abc.py , xyz.pyc xyz ආනයනය සිට නිර්මාණය කරනු ඇත, නමුත් කිසිදු abc.pyc ගොනු කරනු ඇත නිර්මාණය ඒබීසී සිට. py ආනයනය නොකෙරේ.

ආනයනය නොකරන ලද මොඩියුලයක් සඳහා .pyc ගොනුවක් සෑදීමට ඔබට අවශ්‍ය නම්, ඔබට py_compileසහ compileallමොඩියුල භාවිතා කළ හැකිය .

මෙම py_compileමොඩියුලය අතින් කිසිදු මොඩියුලය සම්පාදනය කළ හැකිය. එක් ක්‍රමයක් නම් py_compile.compileඑම මොඩියුලයේ ශ්‍රිතය අන්තර්ක්‍රියාකාරීව භාවිතා කිරීමයි :

>>> import py_compile
>>> py_compile.compile('abc.py')

මෙය .pyc එක abc.py ලෙස එකම ස්ථානයට ලියනු ඇත (ඔබට එය විකල්ප පරාමිතිය සමඟ අභිබවා යා හැකිය cfile).

ඔබට සම්පාදක මොඩියුලය භාවිතයෙන් නාමාවලියක හෝ නාමාවලිවල ඇති සියලුම ගොනු ස්වයංක්‍රීයව සම්පාදනය කළ හැකිය.

python -m compileall

නාමාවලි නාමය (මෙම උදාහරණයේ වත්මන් නාමාවලිය) මඟ හැරී ඇත්නම්, මොඩියුලය සොයාගත් සියල්ල සම්පාදනය කරයි sys.path


6
සහ abc.py ලබා ගැනීම සඳහා සම්පාදනය කිරීමේ වාසිය කුමක්ද?
සහර් අහ්වාල්

A සහර් අහ්වාල් මට සිතිය හැකි එක් වාසියක් වන්නේ සින්ටැක්ස් පරීක්ෂාවයි.
යී බාවෝ

20

පයිතන් (අවම වශයෙන් එය වඩාත් පොදු ලෙස ක්‍රියාත්මක කිරීම) මුල් ප්‍රභවය බයිට් කේත වලට සම්පාදනය කිරීමේ රටාවක් අනුගමනය කරයි, පසුව අථත්‍ය යන්ත්‍රයක බයිට් කේත අර්ථ නිරූපණය කරයි. මෙයින් අදහස් කරන්නේ (නැවතත්, වඩාත් පොදු ක්‍රියාත්මක කිරීම) පිරිසිදු පරිවර්තකයෙකු හෝ පිරිසිදු සම්පාදකයෙකු නොවේ.

කෙසේ වෙතත්, මෙහි අනෙක් පැත්ත නම්, සම්පාදනය කිරීමේ ක්‍රියාවලිය බොහෝ දුරට සැඟවී තිබීමයි. .Pyc ලිපිගොනු මූලික වශයෙන් හැඹිලියක් ලෙස සලකනු ලැබේ; ඔවුන් දේවල් වේගවත් කරයි, නමුත් ඔබ සාමාන්‍යයෙන් ඒවා ගැන දැනුවත් විය යුතු නැත. ගොනු කාලය / දිනය මුද්දර මත පදනම්ව අවශ්‍ය විටදී එය ස්වයංක්‍රීයව අවලංගු කර නැවත පූරණය කරයි (ප්‍රභව කේතය නැවත සම්පාදනය කරයි).

මම මේ සමඟ ගැටළුවක් දුටු එකම අවස්ථාව නම්, සම්පාදනය කරන ලද බයිට් කේත ගොනුවක් කෙසේ හෝ අනාගතයේදී කාලරාමුව හොඳින් ලබා ගැනීමයි, එයින් අදහස් කළේ එය සෑම විටම ප්‍රභව ගොනුවට වඩා අලුත් පෙනුමක් ඇති බවයි. එය අළුත් පෙනුමක් ඇති බැවින්, ප්‍රභව ගොනුව කිසි විටෙකත් නැවත සකස් කර නොතිබුණි, එබැවින් ඔබ කුමන වෙනස්කම් කළත් ඒවා නොසලකා හරින ලදි ...


13

පයිතන්ගේ * .py ගොනුව යනු ඔබ කේත පේළි කිහිපයක් ලියන පෙළ ගොනුවකි. "Python filename.py" කියමින් මෙම ගොනුව ක්‍රියාත්මක කිරීමට ඔබ උත්සාහ කරන විට

මෙම විධානය මඟින් පයිතන් අතථ්‍ය යන්ත්‍රය ක්‍රියාත්මක කරයි. පයිතන් අතථ්‍ය යන්ත්‍රයට සංරචක 2 ක් ඇත: “සම්පාදකයා” සහ “පරිවර්තකය”. පරිවර්තකයාට * .py ගොනුවේ පෙළ කෙලින්ම කියවිය නොහැක, එබැවින් මෙම පා first ය මුලින්ම බයිට් කේතයක් බවට පරිවර්තනය කරනු ලැබේ, එය පීවීඑම් වෙත ඉලක්ක කර ඇත (දෘඩාංග නොව පීවීඑම්) . PVM මෙම බයිට් කේතය ක්‍රියාත්මක කරයි. * .pyc ගොනුව ද ජනනය කරනු ලැබේ, එය ක්‍රියාත්මක කිරීමේ කොටසක් ලෙස ඔබේ ආයාත කිරීමේ ක්‍රියාවලිය ගොනුවේ හෝ වෙනත් ගොනුවක සිදු කරයි.

මෙම * .pyc ගොනුව දැනටමත් ජනනය කර ඇත්නම්, ඊළඟ වතාවේ ඔබ ඔබේ * .py ගොනුව ධාවනය කරන විට / ක්‍රියාත්මක කරන විට, පද්ධතිය කෙලින්ම ඔබේ * .pyc ගොනුව පටවනු ලබන අතර එය කිසිදු සම්පාදනයක් අවශ්‍ය නොවේ (මෙය ඔබට ප්‍රොසෙසරයේ යන්ත්‍ර චක්‍ර කිහිපයක් ඉතිරි කරයි).

* .Pyc ගොනුව ජනනය කළ පසු, ඔබ එය සංස්කරණය නොකරන්නේ නම් * .py ගොනුවක් අවශ්‍ය නොවේ.


7

පයිතන් කේතය අදියර 2 ක් හරහා ගමන් කරයි. පළමු පියවර කේතය .pyc ගොනු වලට සම්පාදනය කරයි, එය ඇත්ත වශයෙන්ම බයිට් කේතයකි. මෙම .pyc ගොනුව (බයිට් කේතය) CPython පරිවර්තකය භාවිතයෙන් අර්ථ නිරූපණය කෙරේ. කරුණාකර මෙම සබැඳිය වෙත යොමු වන්න . මෙහිදී කේත සම්පාදනය හා ක්‍රියාත්මක කිරීමේ ක්‍රියාවලිය පහසු වචන වලින් විස්තර කෙරේ.


1

tldr; එය පරිවර්තනය කළ කේතයක් ප්‍රභව කේතයක් වන අතර එය ක්‍රියාත්මක කිරීම සඳහා පයිතන් වීඑම් අර්ථ නිරූපණය කරයි.

පහළ අවබෝධය : ඕනෑම වැඩසටහනක අවසාන අදියර වන්නේ දෘඩාංග / යන්ත්‍රය මත වැඩසටහනේ උපදෙස් ක්‍රියාත්මක කිරීම / ක්‍රියාත්මක කිරීමයි. එබැවින් ක්‍රියාත්මක කිරීමට පෙර අවධීන් මෙන්න:

  1. CPU මත ක්‍රියාත්මක කිරීම / ක්‍රියාත්මක කිරීම

  2. බයිට් කේතය යන්ත්‍ර කේතයට පරිවර්තනය කිරීම .

    • යන්ත්‍ර කේතය යනු පරිවර්තනයේ අවසාන අදියරයි.

    • CPU මත ක්‍රියාත්මක කළ යුතු උපදෙස් යන්ත්‍ර කේතයෙන් දක්වා ඇත. යන්ත්‍ර කේතය සෘජුවම CPU මඟින් ක්‍රියාත්මක කළ හැකිය .

  3. බයිට් කේතය යන්ත්‍ර කේතයට පරිවර්තනය කිරීම.

    • බයිට්කෝඩ් යනු මධ්‍යම අවධියකි. ඒ සඳහා ගියේ කළ හැකි කාර්යක්ෂමතාව , නමුත් කැප පහසුවෙන් එහාමෙහා ගෙන යාමේ .
  4. ප්‍රභව කේතය බයිට්කෝඩ් බවට පරිවර්තනය කිරීම.

    • ප්‍රභව කේතය a මිනිසාට කියවිය හැකි කේතයකි. පයිචාර්ම් වැනි IDEs (කේත සංස්කාරක) මත වැඩ කිරීමේදී මෙය භාවිතා වේ.

දැන් ඇත්ත කුමන්ත්රණය . මෙම ඕනෑම අදියරක් ගෙන යන විට ප්‍රවේශයන් දෙකක් තිබේ: කේතයක් එකවරම පරිවර්තනය කරන්න (හෝ ක්‍රියාත්මක කරන්න) (අකා සම්පාදනය කරන්න ) සහ කේත රේඛාව රේඛාව අනුව පරිවර්තනය කරන්න [හෝ ක්‍රියාත්මක කරන්න] (අකා අර්ථ නිරූපණය ).

  • උදාහරණයක් ලෙස, අපට ප්‍රභව කේතයක් බයිට්කෝ වෙත සම්පාදනය කළ හැකිය, බයිට් කේතය යන්ත්‍ර කේතයට සම්පාදනය කළ හැකිය, ක්‍රියාත්මක කිරීම සඳහා යන්ත්‍ර කේතය අර්ථ නිරූපණය කළ හැකිය.

  • භාෂාවන්හි සමහර ක්‍රියාත්මක කිරීම් කාර්යක්ෂමතාව සඳහා 3 වන අදියර මඟ හැරේ, එනම් ප්‍රභව කේතය යන්ත්‍ර කේතයට සම්පාදනය කර ක්‍රියාත්මක කිරීම සඳහා යන්ත්‍ර කේතය අර්ථ නිරූපණය කරයි.

  • සමහර ක්‍රියාත්මක කිරීම් සියලු මැද පියවර මඟ හැර ප්‍රභව කේතය ක්‍රියාත්මක කිරීම සඳහා කෙලින්ම අර්ථ නිරූපණය කරයි.

  • නූතන භාෂාවන් බොහෝ විට අර්ථ නිරූපණය සම්පාදනය කරයි .

  • JAVA උදාහරණයක් ලෙස, ප්‍රභව කේතය බයිට් කේතයට සම්පාදනය කරන්න [ජාවා ප්‍රභවය බයිට් කේතයක් ලෙස ගබඩා කර ඇත්තේ එලෙසය], බයිට් කේතය යන්ත්‍ර කේතයට සම්පාදනය කරයි [ජේවීඑම් භාවිතා කරමින්], සහ ක්‍රියාත්මක කිරීම සඳහා යන්ත්‍ර කේතය අර්ථ නිරූපණය කරන්න. [මේ අනුව ජේවීඑම් විවිධ මෙහෙයුම් පද්ධති සඳහා වෙනස් ආකාරයකින් ක්‍රියාත්මක වේ, නමුත් එකම ජාවා ප්‍රභව කේතය ජේවීඑම් ස්ථාපනය කර ඇති විවිධ මෙහෙයුම් පද්ධති මත ක්‍රියාත්මක කළ හැකිය.]

  • උදාහරණයක් ලෙස පයිතන්, ප්‍රභව කේතය බයිට් කේතයට සම්පාදනය කරන්න [සාමාන්‍යයෙන් .pyc ගොනු ලෙස පෙනේ ප්‍රභව කේත සමඟ ], බයිටොකේඩ් යන්ත්‍ර කේතයට සම්පාදනය කරන්න [පීවීඑම් වැනි අථත්‍ය යන්ත්‍රයක් මඟින් සිදු කරන අතර ප්‍රති result ලය ක්‍රියාත්මක කළ හැකි ගොනුවකි], යන්ත්‍රය අර්ථ නිරූපණය කරන්න කේතය / ක්‍රියාත්මක කිරීම සඳහා.

  • භාෂාවක් අර්ථ නිරූපණය කිරීම හෝ සම්පාදනය කිරීම යැයි අපට කිව හැකි විට?

    • පිළිතුර වන්නේ ක්‍රියාත්මක කිරීමේදී භාවිතා කරන ප්‍රවේශය සොයා බැලීමයි. එය යන්ත්‍ර කේතය එකවර ක්‍රියාත්මක කරන්නේ නම් (== සම්පාදනය), එය සම්පාදනය කරන ලද භාෂාවකි. අනෙක් අතට, එය යන්ත්‍ර කේතය රේඛීයව (== අර්ථ නිරූපණය) ක්‍රියාත්මක කරන්නේ නම් එය අර්ථකථනය කරන ලද භාෂාවකි.
  • එබැවින් ජාවා සහ පයිතන් අර්ථකථනය කරන භාෂා වේ.

  • අවුල් සහගත නිසා යාන්ත්රික කේත කිරීමට bytcode පරිවර්තනය කරන බව ද එහි තෙවන පියවර, ක සිදු විය හැකිය. බොහෝ විට මෙය සිදු කරනු ලබන්නේ අතථ්‍ය යන්ත්‍රයක් නම් මෘදුකාංගයක් භාවිතා කරමිනි . අථත්ය යාන්ත්රණයක් යන්ත්රයක් මෙන් ක්රියා කරන නිසා ව්යාකූලත්වය ඇති වේ, නමුත් එය ඇත්ත වශයෙන්ම එසේ නොවේ! අථත්‍ය යන්ත්‍ර හඳුන්වාදීම සඳහා හඳුන්වා දී ඇති අතර, ඕනෑම REAL යන්ත්‍රයක VM එකක් තිබීම එකම ප්‍රභව කේතය ක්‍රියාත්මක කිරීමට අපට ඉඩ සලසයි. බොහෝ වීඑම් වල භාවිතා කරන ප්‍රවේශය [එය තුන්වන අදියර] සම්පාදනය කරයි, එබැවින් සමහරු එය සම්පාදනය කරන ලද භාෂාවක් යැයි කියනු ඇත . වීඑම් වල වැදගත්කම සඳහා, අපි බොහෝ විට පවසන්නේ එවැනි භාෂා සම්පාදනය කර අර්ථ නිරූපණය කරන බවයි.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.