Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【令和最新版】Python実行環境の選択肢 / Modern Python Env Manag...

【令和最新版】Python実行環境の選択肢 / Modern Python Env Management 20240628

2024年6月28日に社内勉強会で利用した資料に一部加筆修正を施したものです

snhryt

July 15, 2024
Tweet

More Decks by snhryt

Other Decks in Programming

Transcript

  1. αϚϦʔ • νʔϜ։ൃ΍Ϋϥ΢υ΁ͷσϓϩΠΛ͢ΔͳΒ %PDLFS QJQ͕ͳΜ΍͔Μ΍҆ύΠ • ࣗ෼Ͱ޷͖์୊΍͍͍ͬͯͳΒ • ʮ1ZUIPOҎ֎ͷݴޠ΋৮ΔΜͩΑͳ͊ʯBTEG VW

    • ʮ1ZUIPO͚ͩͰ͍͍ΜͩΑͳ͊ʯ3ZF  બ୒ࢶ ݸਓత͓͢͢Ί౓ 1ZUIPOͷόʔδϣϯ؅ཧ Ծ૝؀ڥ ύοέʔδ؅ཧ  ˒ˑˑˑˑ QZFOW $POEB $POEB  ˒˒ˑˑˑ QZFOW WFOW QJQ  ˒ˑˑˑˑ QZFOW 1JQFOW 1JQFOW  ˒˒˒ˑˑ BOZFOW 1PFUSZ 1PFUSZ  ˒˒ˑˑˑ BOZFOW 1%. 1%.  ˒˒˒˒ˑ BTEG VW VW  ˒˒˒˒˒ 3ZF 3ZF 3ZF VW  ˒˒˒˒ˑ )BUDI )BUDI )BUDI  ˒˒˒˒˒ %PDLFS %PDLFS QJQ  ˒˒˒˒ˑ %PDLFS %PDLFS 1PFUSZ ˞·͡Ίʹશ૊Έ߹ΘͤΛߟ͑Δͱύλʔϯ਺͕๲Ε্͕ΔͷͰɺ͋Δఔ౓࣌୅ײΛଗ͑ͭͭɺ͍͑΍Ͱ૊Έ߹ΘͤΛઃఆ͍ͯ͠·͢
  2. ิ଍ʮݸਓతʹʯͱॻ͖·͕ͨ͠ɺࢲ͸͜Μͳঢ়گͷਓؒ • ։ൃͷେ൒ʢ͙Β͍ʣ͸1ZUIPO • ओͳ༻్͸σʔλ෼ੳɺ.-σϦϯάɺ؆қͳ8FCΞϓϦέʔγϣϯ։ൃ 4USFBNMJU FUD • ࢒Γ͕42- #JH2VFSZ

    ࢒Γ͕5FSSBGPSN • 8JOEPXTͰ։ൃ͸͠ͳ͍ • .BDͷϩʔΧϧ্Ͱ։ൃ͢Δ͜ͱ͕ଟ͍ • Ϋϥ΢υ্ͷ-JOVYαʔόʔ্Ͱ։ൃ͢Δ͜ͱ΋͋Γ • ۀ຿ͱϓϥΠϕʔτར༻ͲͪΒ΋͋Γ • ۀ຿༻్Ͱ΋ΫϦςΟΧϧͳ੍໿ʢFH1ZUIPOܥ͕ඞਢͰʙʣ͸جຊͳ͍ • ͦ΋ͦ΋࠷ۙ͋·Γۀ຿ͰίʔυΛॻ͚͍ͯͳ͍ 
  3. ͜ͷதͩͱɺݸਓతʹ͸ BTEG Ұ୒ • QZFOW1ZUIPOͷͨΊͷόʔδϣϯ؅ཧπʔϧ • BOZFOWQZFOWΛ࢝Ίͱ͢Δɺෳ਺ݴޠͷ FOWΛҰ؏ͯ͠؅ཧ͢Δπʔϧ • anyenv

    install pyenv ͷΑ͏ʹ࢖͏ • 1ZUIPOҎ֎ͷݴޠΛ࢖Θͳ͍৔߹͸ϝϦοτ͕΄΅ͳ͍ɻ ͨͩQZFOWΛΠϯετʔϧ͢Δ·Ͱʹͻͱख͕ؒ૿͑Δ͚ͩ • ೔ຊਓͷํ !SJZXP ͕ݸਓ։ൃ͍ͯͯ͠ɺ࢒೦ͳ͕Β೥Ҏ߱ϦϦʔε్͕ઈ͍͑ͯΔ • BTEGQZUIPOΛؚΉɺ͞·͟·ͳݴޠɾ$-*ίϚϯυͷόʔδϣϯ؅ཧπʔϧ • asdf plugin-add python; asdf install python 3.12.XX ͷΑ͏ʹ࢖͏ • BOZFOW͸ʮόʔδϣϯ؅ཧπʔϧΛ؅ཧ͢Δπʔϧʯ͕ͩͬͨɺ BTEG͸ΑΓ௚઀తʹݴޠɾ$-*ͷόʔδϣϯ؅ཧ͕Ͱ͖Δ • WͰ֬ೝͨ͠ΒɺϓϥάΠϯݸʢʂʣ͋ͬͨ  5FSSBGPSNؔ࿈͚ͩͰ΋͜ͷྔˠ ʢDGBOZFOWͩͱUGFOWͷΈʣ 🙏 FYDVTF🙏 NJTF͸ଘࡏ͚ͩೝ஌͍ͯ͠·͕͢ ΩϟονΞοϓͰ͖ͯͳ͍Ͱ͢ʜ
  4. ࠷ۙ͸Ծ૝؀ڥͱύοέʔδ؅ཧ͕ͭͷπʔϧͰ׬݁͢Δ͜ͱ͕ଟ͍ • ҎԼ͸͢΂ͯɺԾ૝؀ڥߏங΋ύοέʔδ؅ཧ΋΍ͬͯ͘ΕΔπʔϧ • $POEB "OBDPOEB.JOJDPOEB • 1JQFOW • 1PFUSZ

    • 1%. • VW • ରൺͱͯ͠ɺൺֱతલ͔Βଘࡏ͢Δ WJSUVBMFOW WFOW ͳͲ͸ Ծ૝؀ڥͷΈΛఏڙ͠ɺύοέʔδ؅ཧ͸QJQͳͲଞͰ୲͏ඞཁ͕͋ͬͨ • ͱ͸͍͑ɺ্هͷԾ૝؀ڥɾύοέʔδ؅ཧҰମܕܥͷπʔϧ΋ɺཪଆͰ͸ WJSUVBMFOW ΍ WFOW ͷ؀ڥཱ͕͍ͬͯͯɺͦΕΛπʔϧଆͰϚωʔδ͍ͯ͠Δ͜ͱ͕ଟ͍  IUUQTTUBSIJTUPSZDPNDPOEBDPOEBQZQBQJQFOWQZUIPO QPFUSZQPFUSZQENQSPKFDUQENBTUSBMTIVW%BUF
  5. $POEB "OBDPOEB.JOJDPOEB • ஗͍ʂ • "OBDPOEB͸େن໛૊৫Ͱͷ঎༻ར༻ʹ͸༗ྉϥΠηϯε͕ඞཁʹ ˠ .JOJDPOEB DPOEBGPSHFͰͷճආ͕Ұൠత ˠ

    ʘ໘౗͍͘͞ ʗ • Ծ૝؀ڥߏஙͱύοέʔδ؅ཧΛ྆ํ΍ͬͯ͘ΕΔʮ࿝ฮʯͰɺ ͦΕΏ͑8FCɾจݙͷࢀߟ৘ใͷ਺΋๛෋ͳͷͰɺॳֶऀ޲͖Ͱ͸͋Δ • "OBDPOEBͷग़ࣗΛߟ͑Δͱ౰ͨΓલ͕ͩʣػցֶश΍σʔλ෼ੳͷखஈͱͯ͠ɺͨ·ͨ· 1ZUIPO͕ద͓ͯ͠Γɺͦͷ1ZUIPOΛಈ͔ͨ͢Ίͷʙͱ͍͏จ຺Ͱجຊతʹ͸࢖ΘΕ͍ͯΔ • 8FCΞϓϦέʔγϣϯ։ൃͰ$POEB͕࢖ΘΕΔέʔεͬͯ͋ΔͷͩΖ͏͔ʁ🧐 
  6. 1JQFOW • QJQͷ։ൃݩͰ͋Δ1Z1"͕։ൃ͍ͯ͠Δπʔϧ • UPNMϑΝΠϧ MPDLϑΝΠϧͰͷύοέʔδ؅ཧͷઌۦऀతଘࡏ • ͨͩ͠ɺ؅ཧʹ༻͍ΒΕΔ 1JQGJMF ͸ಠࣗϑΥʔϚοτͰඇ1&1४ڌ

    • ೥୅ޙ൒ʹ͸੎͍͕͕͋ͬͨɺಛʹ 1PFUSZొ৔ޙʹ͸੎͍͕ͳ͘ͳ͍ͬͯΔ • ͱ͸͍͑ɺࠓ΋ܧଓతʹϦϦʔε͸͍ͯ͠ΔͷͰ ػೳΞοϓσʔτ͸ணʑͱೖ͍ͬͯΔ໛༷ʁ • ʢ௥͑ͯͳ͍ͷͰৄ͍͠ਓڭ͍͑ͯͩ͘͞ʣ • ͹Μ͘͠͞ΜͷϒϩάͰ೥ࠒ·Ͱͷมભ͕ৄ͘͠঺հ͞ΕͯΔͷͰੋඇ IUUQTWBBBBBBORVJTIIBUFOBCMPHDPNFOUSZ 
  7. 1PFUSZ • ೥୆ʹೖ͔ͬͯΒ1JQFOWΛൈ͍ͯओྲྀʹͳΓͭͭ͋Δπʔϧ • ͲͪΒ͔ͱ͍͏ͱɺԾ૝؀ڥͱ͍͏ΑΓ͸ɺύοέʔδ؅ཧจ຺͕ϝΠϯͳҹ৅ • ڧΈ • QZQSPKFDUUPNM ͰSFRVJSFNOUTUYU

    TFUVQQZ ͷ྆ํͷ໾ׂΛ ՌͨͤΔɻ͔͠΋ࢹ֮తʹ΋ݟ΍͍͢ • QZQSPKFDUUPNM͸1&1४ڌ   ˠ ޓ׵ੑߴ • QJQͩͱύοέʔδͷґଘؔ܎ͰίϯϑϦΫτ͕͠͹͠͹ ൃੜ͢Δ͕ɺ1PFUSZ͸ڧྗͳϦκϧόͷ͓͔͛Ͱɺ ίϯϑϦΫτΛ͍͍ײ͡ʹղܾͯ͘͠ΕΔʢ͜ͱ͕ଟ͍ʣ • GMBLF QZUFTU౳ͷ։ൃ͔࣌͠࢖Θͳ͍ύοέʔδΛ෼͚ͯ ؅ཧͰ͖Δ • ύοέʔδΛ௥Ճ͢Δͱඞͣόʔδϣϯ͕QZQSPKFDUUPNM ʹ ໌ه͞ΕΔ ˠ ίʔυͷ࣮ߦ࠶ݱੑͷ୲อ • SFRVJSFNFOUTUYU Ͱ͋Γ͕ͪͳɺόʔδϣϯࢦఆ࿙ΕʹΑΔ ʮલ͸ಈ͍͚ͨͲࠓ͸ಈ͔ͳ͘ͳͬͯ͠·ͬͨʯΛ๷͛Δ • WFOW QJQͱͷରൺ • Ծ૝؀ڥߏஙpython –m venv venv; source venv/bin/activate; pip install –r requirements.txt ˱poetry install • ύοέʔδͷΠϯετʔϧpip install pandas ˱ poetry add pandas • λεΫϥϯφʔͱͯ͠ͷػೳ͸ͳ͠ʢࢀߟ 1PFUSZͷ TDSJQUT͸λεΫϥϯφʔػೳͰ͸ͳ͍ʣ  ˢ͍ͭ࠷ۙۀ຿Ͱ࢖ͬͨQZQSPKFDUUPNM
  8. 1%.  • 1%.1ZUIPO%FWFMPQNFOU.BTUFSˡͭΑͦ͏ʢখฒײʣ • 1PFUSZͷ೥ޙഐʢϦϦʔελΠϛϯάతʹʣͰɺ1PFUSZͱಉ༷ʹQZQSPKFDUUPNM ϕʔεͰϓϩδΣΫτɾύοέʔδΛ؅ཧՄೳ • ίϚϯυ΍ૢ࡞ײͷޓ׵ੑ΋ߴ͘ɺ͔ͳΓγʔϜϨεʹҠߦ͸Ͱ͖Δ •

    1PFUSZͱൺ΂ͯͷڧΈࠓͱͳͬͯ͸͋·Γͳ͍ • 1&1४ڌ ͦ΋ͦ΋1&1ࣗମ͕ϦδΣΫτ͞Εͨ • Ծ૝؀ڥΛ࡞ΒͣʹɺϩʔΧϧͷ __pypackages__ σΟϨΫτϦʹඞཁͳ΋ͷΛ͢΂ͯΠϯετʔϧ͢Δ࿩ • ଎͍ ଎͔ͬͨ • 1PFUSZ͕ΊͪΌͪ͘Ό଎͘ͳͬͯΔ໛༷ • Ωϟογϡͳ͠ঢ়ଶͷ QPFUSZJOTUBMMWTQEN JOTUBMMͷ଎౓ൺֱ ˞1ZUIPO1BDLBHF.BOBHFS4IPPUPVUͷ೥࣌఺ʢڕ୓͸ͪ͜ΒͷهࣄΛࢀরʣͱຊ೔࣌఺Ͱൺֱ • QEN MBUFTU ໿T • QPFUSZ໿T • QPFUSZ໿T IUUQTEJTDVTTQZUIPOPSHUQFQQZUIPOMPDBMQBDLBHFTEJSFDUPSZ
  9. VW • ೥݄ʹൃද͞Εͨ͹͔Γͷ͔ͳΓ৽͍͠πʔϧɻ 3VTU੡ͷര଎1ZUIPOϑΥʔϚολʔz3VGGzΛ։ൃ͍ͯ͠Δ"TUSBM͕ࣾ։ൃ͍ͯ͠Δ • ಛ௃ • 3VTUͰॻ͔Ε͍ͯΔͷͰര଎ʢDG1PFUSZ 1%.͸1ZUIPOͰॻ͔Ε͍ͯΔʣ •

    ૢ࡞ײ͸WFOW QJQͱ΄΅ಉ͡ • Ծ૝؀ڥ্ཱͪ͛uv venv; source .venv/bin/activate • ύοέʔδΠϯετʔϧ uv pip install pandas • QZQSPKFDUUPNMʹରԠ͓ͯ͠Γ uv pip install –r pyproject.toml ͱ͍ͬͨૢ࡞΋Մೳ  Ωϟογϡͳ͠ $PME Ωϟογϡ͋Γ 8BSN IUUQTBTUSBMTICMPHVW
  10. 3ZF • !NJUTVIJLPʢ"SNJO3POBDIFS͞Μʣ͕ݸਓ։ൃ͖ͯͨ͠ 1ZUIPOͷόʔδϣϯ؅ཧ΋ؚΊͨ3VTU੡ͷશ෦੝Γπʔϧ • ͢΂͕ͯ SZFίϚϯυͰ׬݁͢Δ VW΋࢖͑Δ • ϓϩδΣΫτ࡞੒rye

    init • όʔδϣϯࢦఆrye pin 3.12 • ύοέʔδͷҰׅΠϯετʔϧʢQZQSPKFDUUPNMܦ༝ʣrye sync • ύοέʔδͷΠϯετʔϧrye add “flask>=2.0” • Ծ૝؀ڥ্Ͱͷ࣮ߦ rye run xxx • 3ZFͱVWʹ͸ີ઀ͳͭͳ͕Γ͕͋Δ • 3ZFͷϙςϯγϟϧɾχʔζͷߴ·Γͱ͸ཪෲʹɺݸਓ։ൃʹݶքΛײ͍ͯͨ͡ • ೥݄ͷVWϦϦʔεͷλΠϛϯάͰɺVW։ൃݩͷ"TUSBM͕ࣾ3ZFͷ؅ཧΛҾ͖ܧ͙ UBLJOHTUFXBSETIJQ ͜ͱΛൃද • কདྷతʹ͸VWΛ֦ு͠ɺͦ͜ʹ3ZFͷػೳ΍ࢥ૝Λ౷߹͍ͯ͘͠ ˞3ZF(SPXT8JUI67ΛಡΜͰ͜͏ղऍ͍ͯ͠·͕͢ɺཧղɾهड़͕ޡ͍ͬͯͨΒ͝ΊΜͳ͍͞ɾɾɾ 
  11. )BUDI • QJQ 1JQFOWͱಉ͡։ൃݩͷ1Z1"͕։ൃ͍ͯ͠Δશ෦੝Γπʔϧ • ͢΂͕ͯ IBUDIίϚϯυͰ׬݁͠ɺ࢖༻ײ͸3ZFʹ͍ۙɻVW΋࢖͑Δ • ϓϩδΣΫτ࡞੒hatch new

    • όʔδϣϯࢦఆhatch python install 3.12 • Ծ૝؀ڥ্Ͱͷ࣮ߦ hatch run python xxx • 3ZFͱൺֱͨ͠ಛ௃ • QZQSPKFDUUPNMʹґଘύοέʔδΛॻ͚͹ɺ IBUDISVOΛͨ͠ͱ͖ʹࣗಈͰΠϯετʔϧ͞ΕΔ • 1ZUIPOͰॻ͔Ε͍ͯΔ΋ͷͷߴ଎ • 1Z"QQͱ͍͏3VTU੡ͷߴ଎ͳϥϯλΠϜΠϯετʔϥʔͷ 1ZUIPO8SBQQFSΛར༻͍ͯ͠ΔͨΊ • ࢒೦ͳ͕Βɺ3ZFΑΓޙൃ͕ͩ੎͍͸׬શʹෛ͚͍ͯΔʜ  IUUQTTUBSIJTUPSZDPNBTUSBMTISZFQZQBIBUDI%BUF
  12. ࢲ͸͍·ԿΛ͔͍ͭͬͯΔ͔ʁ • ෳ਺ਓͰ·͡Ίʹ։ൃ͢Δͱ͖͸ %PDLFS QJQ • ݸਓͰద౰ʹ։ൃ͢Δͱ͖͸ BTEG VW •

    ࠷ۙ͸1ZUIPOॻ͘ͱ͖͸3ZFʹدͤͯ΋͍͍͔΋ͱ΋ࢥ͍࢝Ί͍ͯΔɾɾɾ  બ୒ࢶ ݸਓత͓͢͢Ί౓ 1ZUIPOͷόʔδϣϯ؅ཧ Ծ૝؀ڥ ύοέʔδ؅ཧ  ˒ˑˑˑˑ QZFOW $POEB $POEB  ˒˒ˑˑˑ QZFOW WFOW QJQ  ˒ˑˑˑˑ QZFOW 1JQFOW 1JQFOW  ˒˒˒ˑˑ BOZFOW 1PFUSZ 1PFUSZ  ˒˒ˑˑˑ BOZFOW 1%. 1%.  ˒˒˒˒ˑ BTEG VW VW  ˒˒˒˒˒ 3ZF 3ZF 3ZF VW  ˒˒˒˒ˑ )BUDI )BUDI )BUDI  ˒˒˒˒˒ %PDLFS %PDLFS QJQ  ˒˒˒˒ˑ %PDLFS %PDLFS 1PFUSZ
  13. ݸਓతͳߟ͑ • %PDLFS QJQͰॻ͍͓͚ͯ͹ͱΓ͋͑ͣϙʔλϏϦςΟ͕ߴ͍͠ɺ%PDLFS͕ ෳ਺ͷ։ൃऀϩʔϧʢYYYΤϯδχΞɺσʔλYYYʣͷڞ௨ݴޠʹͳͬͯ͘ΕΔ • Α͋͘ΔύλʔϯͳͷͰ8FCͷࢀߟ৘ใ΋ଟ͍ • έʔεʹ΋ΑΔ͕ DPNQPTFZBNM

    ͰTFSWJDF͝ͱʹ։ൃΛਐΊΒΕΔ఺΋HPPE • ͕ɺຖճ%PDLFSGJMFΛॻ͍ͨΓɺCVJME͢Δͷ͸ਖ਼௚໘౗ • ύοέʔδͷΠϯετʔϧ΋ɺ։ൃ΁ͷணख΋଎͕͞ਖ਼ٛɻ3VTU͔͠উͨΜ • 'PSNBUUFS಺ଂܥͷπʔϧ΋͋Δ͕ɺͦͷ΁Μ͸QSFDPNNJUʹد͍ͤͨ 
  14. αϚϦʔʢ࠶ܝʣ • νʔϜ։ൃ΍Ϋϥ΢υ΁ͷσϓϩΠΛ͢ΔͳΒ %PDLFS QJQ͕ͳΜ΍͔Μ΍҆ύΠ • ࣗ෼Ͱ޷͖์୊΍͍͍ͬͯͳΒ • ʮ1ZUIPOҎ֎ͷݴޠ΋৮ΔΜͩΑͳ͊ʯBTEG VW

    • ʮ1ZUIPO͚ͩͰ͍͍ΜͩΑͳ͊ʯ3ZF  બ୒ࢶ ݸਓత͓͢͢Ί౓ 1ZUIPOͷόʔδϣϯ؅ཧ Ծ૝؀ڥ ύοέʔδ؅ཧ  ˒ˑˑˑˑ QZFOW $POEB $POEB  ˒˒ˑˑˑ QZFOW WFOW QJQ  ˒ˑˑˑˑ QZFOW 1JQFOW 1JQFOW  ˒˒˒ˑˑ BOZFOW 1PFUSZ 1PFUSZ  ˒˒ˑˑˑ BOZFOW 1%. 1%.  ˒˒˒˒ˑ BTEG VW VW  ˒˒˒˒˒ 3ZF 3ZF 3ZF VW  ˒˒˒˒ˑ )BUDI )BUDI )BUDI  ˒˒˒˒˒ %PDLFS %PDLFS QJQ  ˒˒˒˒ˑ %PDLFS %PDLFS 1PFUSZ ˞·͡Ίʹશ૊Έ߹ΘͤΛߟ͑Δͱύλʔϯ਺͕๲Ε্͕ΔͷͰɺ͋Δఔ౓࣌୅ײΛଗ͑ͭͭɺ͍͑΍Ͱ૊Έ߹ΘͤΛઃఆ͍ͯ͠·͢