Kas yra __ pycache__?

Iš to, ką suprantu, talpykla yra šifruotas panašių failų failas.

Ką darome su __pycache__ ? Ar tai, ką mes suteikiame žmonėms, o ne mūsų šaltinio kodui? Ar tai tik mano indėlis? Šis aplankas ir toliau kuriamas, kas tai yra?

418
01 июня '13 в 7:24 2013-06-01 07:24 nustatė user2063042 birželio 1 d., 13 val. 2013-06-01 07:24
@ 8 atsakymai

Kai paleidžiate programą „python“, vertėjas pirmiausia surenka jį į baitekodą (tai yra supaprastinimas) ir išsaugo jį aplanke __pycache__ . Jei žiūrėsite, rasite rinkmeną failų, kurie dalinsis .py failų pavadinimais projekto aplanke, tik jų plėtiniai bus .pyc arba .pyo. Tai failai, sukomponuoti bytecodes ir optimizuoti naudojant bytecode savo programų failus.

Kaip programuotojas, galite tiesiog jį ignoruoti ... Viskas, ką jis daro, daro jūsų programą šiek tiek greičiau. Kai jūsų scenarijai keičiasi, jie bus perkuriami, o jei ištrinsite failus ar visą aplanką ir vėl paleisite programą, jie bus rodomi dar kartą (nebent jūs konkrečiai slopinsite šį elgesį)

Jei naudojate „cpython“ (kuri yra dažniausia, nes ji yra nuorodos diegimas), ir jums nereikia šio aplanko, galite jį slopinti naudodamiesi vertėjo žodžiu, naudodami, pvz.

 python -B foo.py 

Kita galimybė, kaip nurodė tcaswell, yra nustatyti PYTHONDONTWRITEBYTECODE aplinkos PYTHONDONTWRITEBYTECODE bet kuriai vertei (pagal python vadovo puslapį, bet kokią ne tuščią eilutę).

351
01 июня '13 в 7:31 2013-06-01 07:31 atsakymas pateikiamas scott_fakename birželio 1 d., 13 val

__pycache__ yra aplankas, kuriame yra Python 3 bytecode, parengtas ir paruoštas paleisti .

Nesijaudinkite dėl šių failų naikinimo ir nespauskite kūrinio, nes tai pablogins našumą. Paprasčiausiai paruošite rekursyvią komandą (žr. Žemiau), kad prireikus išvalytumėte, nes baito kodas gali pasenti ekstremaliais atvejais (žr. Pastabas).

Python programuotojai paprastai ignoruoja baitekodą. Iš tiesų, __pycache__ ir *.pyc yra bendros eilutės, kurias galima pamatyti .gitignore failuose. Baito kodas nėra skirtas platinti ir gali būti išmontuotas naudojant dis modulį .


Jei naudojate OS X, galite lengvai paslėpti visus šiuos savo aplanko aplankus vykdydami šią komandą iš savo projekto šakninio aplanko.

 find . -name '__pycache__' -exec chflags hidden {} \; 

Pakeiskite __pycache__ su *.pyc už Python 2.

Tai nustato visų šių katalogų (.pyc failų) vėliavą, nurodydama „Finder“ / „Textmate 2“ pašalinti juos iš sąrašų. Svarbu, kad yra baitekodas, jis tiesiog paslėptas.

border=0

Pakartokite komandą, jei kuriate naujus modulius ir norite paslėpti naują baito kodą arba ištrinti paslėptus baitų kodo failus.


Windows sistemoje lygiavertė komanda gali būti patvirtinta (nepatvirtinta, paketinis scenarijus yra sveikintinas):

 dir * /s/b | findstr __pycache__ | attrib +h +s +r 

Tai tas pats, kas vyksta per projektą, paslėpti aplankus, naudojant dešinįjį pelės klavišą> slėpti ...


Vykdomų vienetų testai yra vienas iš scenarijų (daugiau komentarų), kur ištrinti *.pyc failus ir __pycache__ aplankus __pycache__ tikrai naudinga. „ ~/.bash_profile naudoju šias eilutes ir tiesiog paleiskite „ cl , jei reikia, ją išvalyti.

 alias cpy='find . -name "__pycache__" -delete' alias cpc='find . -name "*.pyc" -delete' ... alias cl='cpy  cpc  ...' 
108
06 февр. Atsakymą pateikė F. Malina, vasario 6 d. 2015-02-06 14:52 '15 at 14:52 2015-02-06 14:52

__Pycache__ aplankas sukuriamas naudojant eilutę

 import file_name 

arba pabandykite gauti informaciją iš kito sukurto failo. Tai leidžia šiek tiek greičiau paleisti programą antrą kartą atidarant kitą failą.

15
Alekso atsakymas . 17 февр. S. 17 vasaris 2018-02-17 23:49 '18, 11:49 pm 2018-02-17 23:49

__pycache__ yra katalogas, kuriame yra bytecode cache failai, kuriuos automatiškai sukuria python, ty kompiliuoti python arba .pyc failai. Jums gali būti įdomu, kodėl „Python“, „interpretuota“ kalba, paprastai turi kompiliuojamų failų. Šis SO klausimas išsprendžia šį klausimą (ir tai tikrai verta perskaityti šį atsakymą ).

Iš esmės

  • tai daro jūsų programą šiek tiek greičiau
  • Jūs galite tiesiog ignoruoti.

„Python“ dokumentuose išsamiau aprašoma, kaip jis veikia ir kodėl jis egzistuoja:

  • Jis buvo įtrauktas į 3.2 python'ą, nes esama sistema, palaikanti .pyc failus tame pačiame kataloge, sukėlė įvairių problemų, pavyzdžiui, kai programa buvo paleista su skirtingomis „Python“ vertėjų versijomis. Išsamią specifikaciją žr. PEP 3174 .
8
08 янв. Atsakymą pateikė FluxLemur 08 sausis 2018-01-08 05:43 '18 ne 5:43 2018-01-08 05:43

„Python“ vertėjas sudaro * .py scenarijų failą ir išsaugo kompiliavimo rezultatus į __pycache__ katalogą.

Vykdant projektą dar kartą, jei vertėjas nustato, kad * .py scenarijus nebuvo pakeistas, jis praleidžia kompiliavimo žingsnį ir paleidžia anksčiau sukurtą * .pyc failą, saugomą __pycache__ aplanke.

Kai projektas yra sudėtingas, prieš pradedant projektą, galite sutrumpinti pasirengimo laiką. Jei programa yra per maža, ją galite ignoruoti naudodami python -B abc.py su B parinktimi

2
21 июня '18 в 10:05 2018-06-21 10:05 atsakymą pateikė Marcus Thornton, birželio 21 d., 18 val. 10:05 2018-06-21 10:05

3.2 ir vėlesnėse versijose „Python“ sukauptus .pic baitų kodo failus saugo į __pycache__ katalogą, pavadintą __pycache__ esančiame kataloge, kuriame yra šaltinio failai su failų pavadinimais, kurie identifikuoja juos sukūrę Python versiją (pvz., Script.cpython-33.pyc) .

1
30 марта '17 в 18:37 2017-03-30 18:37 atsakymą pateikė Shashidhar Yalagi , kovo 30 d. 17, 18:37 2017-03-30 18:37

pycache = Kompiuterizuotų python failų kodai

0
14 июня '18 в 13:03 2018-06-14 13:03 atsakymą pateikė vartotojo9457455 birželio 14 d., 18 val

„Python“ vertėjas surenka jūsų kodą į šiuos talpykloje saugomus failus ir išsaugo juos šiuose aplankuose bet kuriuo metu

 import something 

jis bus rodomas

0
10 янв. Roi Mor atsakymą pateikė sausio 10 d. 2019-01-10 01:33 '19 at 1:33 nuo 2019-01-10 01:33

Kiti klausimai apie žymes arba Užduoti klausimą