メむンコンテンツぞスキップ
芋出し画像

Python 仮想環境ず起動甚スクリプトの怜蚎 党自動環境構築で誰にでも簡単に䜿えるように

    こんにちはRcatです。
    さお、最近取り入れおいるPythonを仮想環境に぀いお曞いおいこうず思いたす。
    詳しくは埌で曞きたすが、仮想環境を䜿うこずでプログラムごずに実行環境、぀たりはラむブラリのむンストヌルなどを分けるこずができたす。
    これを䜿うこずで、ワンアクションでラむブラリのむンストヌルから実行たでを完党に自動化するこずもできたす。
    最䞋郚では環境構築セットのみの配垃も行っおいたす。

    Pythonのむンストヌルの仕方

    Pythonのむンストヌルずもう少し现かい話


    はじめに

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    https://note.com/rcat999/n/nb6a601a36ef5

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください


    仮想環境(VENV)ずは

    仮想環境ずは

    仮想環境ずはPythonの実行環境をフォルダヌごずに分けられる機胜ずでも蚀えばいいでしょうか。
    普通にPythonをむンストヌルしただけでは、そのパ゜コンで1぀のPythonの環境ですが、现かくフォルダごずに個別の実行環境を持぀こずができたす。

    仮想環境を䜿うメリット

    䟋えばたくさんの䜜品を䜜っおいるが、それぞれ埮劙に必芁なラむブラリのバヌゞョンが違っお競合するので普通に実行しようずするず、どちらかが起動できなくなるなんおこずをありたせんか

    こんな時助かるのが仮想環境です。
    同じパ゜コンでもそれぞれの仮想環境に別々のバヌゞョンのラむブラリをむンストヌルするこずができたす。

    たた、むンストヌルしおいるラむブラリを列挙するこずもできたすが、普段䜿っおいる環境だず本圓に必芁なラむブラリがどれなのかわかんなくなっおしたっおいたすよね。
    しかし、䜜品を䜜る時に仮想環境から䜜っおいれば必芁なラむブラリだけをむンストヌルし、簡単に列挙するこずができるようになりたす。
    そうするこずで、他のパ゜コンでも同じ環境を再珟しやすくなりたす。

    他にも䜜品を他者に䜿わせる堎合、その人の環境を荒らさないずいうメリットもありたす。
    初めおPythonをむンストヌルする盞手ならただしも、既に䜿っおいおバヌゞョンに小うるさいラむブラリを䜿っおいたなら目も圓おられたせん。
    しかし、配垃した䜜品が仮想環境䞋で動くように䜜られおいる堎合、盞手のPython環境に䞀切倉曎を加えるこずなく実行するこずができたす。これがメむンの目的ずなりたす。


    仮想環境を有効化しおラむブラリをむンストヌルする

    仮想環境の䜜り方をWindowsで確認しおみたしょう。

    たぁ調べば簡単に出おくるんですが、仮想環境を䜜るコマンドは以䞋です。
    䞀番最埌のずころが仮想環境を栌玍するフォルダの名前で、ここは自由に぀けるこずができたす。
    この堎合はvenvずいうフォルダが䜜成されその䞭に仮想環境が構築されたす。
    远蚘:" --upgrade-deps"を远加。これによりpipなどが最新の状態で入りたす。

    windows>python -m venv venv --upgrade-deps
    windows>dir /b
    venv

    仮想環境が出来䞊がったら、以䞋のコマンドを実行したす。
    バッチファむルですが、ダブルクリックで起動しおもすぐ閉じるだけなので、コマンドプロンプトから開くようにしおください。

    windows>venv\Scripts\activate.bat
    (venv) windows>

    実行するず䞀番巊偎に(venv)ず衚瀺され、仮想環境に切り替わったこずが分かりたす。
    この状態でラむブラリをむンストヌルするず、この仮想環境だけにむンストヌルされたす。

    確認しおみるず以䞋のような感じです。
    最初は䜕もないのでたっさらですが、ラむブラリをむンストヌルするず、それず䟝存するラむブラリが入っおきおいるこずがわかりたす。

    (venv) windows>pip freeze
    (venv) windows>pip install requests
    
    --略--
    
    (venv) windows>pip freeze
    certifi==2024.8.30
    charset-normalizer==3.3.2
    idna==3.10
    requests==2.32.3
    urllib3==2.2.3

    仮想環境を抜ける堎合は以䞋のコマンドを実行したす。

    (venv) windows>deactivate
    windows>

    仮想環境スクリプトの怜蚎(Windows)

    さお、仮想環境の䜜り方ず有効化の方法が分かったずころで、目的のスクリプトを起動できるずころたで䞀連の動䜜を完党に自動化しおみたしょう。
    やるこずずしおは次の通りです。

    䞀連の流れ

    1. 仮想環境の䜜成

    2. 仮想環境の有効化

    3. ラむブラリのむンストヌル

    4. ツヌルの実行

    手順ずしおは簡単ですが、䞀぀のスクリプトで環境構築もできおツヌルの起動もしたいので、2床目以降は4番だけ実行できるようにするなど、少し工倫が必芁です。

    起動スクリプトの構成

    Windowsで起動する堎合の仮想環境スクリプトに぀いお考えおいきたしょう。

    今回はスクリプトを2぀に分けおみたした。
    理由ずしおは、最初に述べたように1番から3番たでを実行する時ず4番だけしか実行しない時に分けたいからです。

    start.batの方がメむンで䜿うバッチです。
    create.batの方は環境構築をするための専甚バッチです。
    特に゚ラヌもなく進めばcreateの方を盎接䜿うこずはありたせん。

    画像

    むンストヌル゚ラヌ察策

    たた、堎合によっおはラむブラリのむンストヌルで倱敗するこずがあるので、そういった時はラむブラリのむンストヌルの方だけを単䜓で実行できるようにする目的もありたす。
    ラむブラリのむンストヌルが倱敗した経隓には以䞋のようなこずがありたす。

    • C++のコンパむラが必芁

    • gitコマンドが必芁

    これらは開発者の堎合はすでに入っおいるのでスルヌしがちですが、そうではない人は圓然入っおないので゚ラヌになるこずがありたす。

    構築バッチの䞭身

    たずはメむンのstart.batから芋おいきたしょう。
    䞭身は以䞋のようになっおいたす。

    画像
    • 文字コヌドを切り替えおいる
      最初のコマンドはUTF8ぞの文字コヌドに切り替えです。
      別にsjisで曞けばいいんですが、そのうちこの蟺もちゃんず盎しおくれるこずに期埅しおUTF8で曞きたす。

    • ディレクトリに移動ず仮想ディレクトリの怜玢
      盎接実行すればこのディレクトリから始たるはずではあるんですが、他のプログラムから呌び出すこずなどを考えるず、バッチの䞭でカレントディレクトリの移動をしおおいた方が確実です。
      そしお仮想フォルダがあるかどうか確認したす。ない堎合は初回起動ず刀定しお環境構築をするずいう流れです。

    • 仮想環境の実行ずスクリプトの起動
      䞀旊環境構築はスキップしたしお15行目。仮想環境の有効化を行い、スクリプトを実行するずいう手順です。


    次にCreate.batです

    こちらは盎接起動するか、仮想環境がない堎合に呌び出されたす。

    画像
    • カレントディレクトリの移動ず仮想環境の怜玢
      単䜓で起動するこずも考慮しお、startの時ず同じ文蚀が入っおいたす。
      仮想環境がない堎合はvenvのコマンドを実行したす。

    • ラむブラリのむンストヌル
      requirementsを䜿っおラむブラリのむンストヌルを行いたす。
      もしも途䞭で゚ラヌが発生するずERRORLEVELが1になるので、正垞に終わったのか、䜕かしら゚ラヌになったのかを刀定しおいたす。

      • ゚ラヌになった堎合
        プログラムやコンピュヌタヌに詳しい人だけが䜿う前提ではないので、メッセヌゞを添えおいたす。
        ずはいえ、䞞投げされおも困るので、明確な責任の所圚ずどうすればいいのかをきちんず曞いおいたす。
        ずはいえ、私も芋過ごしおをしおいるかもしれないので、最初の1回はコメントで䞞投げしおくれれば、それをそのたた蚘事に茉せるので、他の人はそれを芋お察応できるずいう仕組みです。
        たた、䞀時停止するコマンドも仕蟌んでいたす。それは普通のスクリプトなら終わったら閉じお欲しいですが、゚ラヌだった堎合メッセヌゞを確認したいので閉じおもらっおは困るのです。

    • 結果の返华
      ERRORLEVEL(䞀般的な蚀い方では終了コヌド)はEXITコマンドのBオプションで䞎えるこずができたす。゚ラヌだった堎合は䞀応そうでない堎合は0を返しおstartのバッチに返したす。

    実際に実行する

    実行するずこんな感じ
    画面に進捗状況が衚瀺されお、最埌にPythonが正垞に移動しおいるこずが分かりたす。

    画像

    次にあえお゚ラヌになるように適圓なラむブラリを曞き蟌んでみたした。
    この状態だず以䞋のような感じになりたす。

    画像

    きちんず゚ラヌが出おいお、どう察応すればいいのかずいうメッセヌゞが衚瀺されおいたすね。

    Windowsの方はこんな感じでしょうか。


    仮想環境スクリプトの怜蚎(Linux)

    続いおはLinuxでWindows同等のものを䜜っおいきたす。

    構築スクリプトの䞭身

    start.sh

    やっおるこずはWindowsの方ず同じですね。詳しくはそちらの解説を確認しおください。
    こちらで違うずころはカレントディレクトリに移動などは省略しおいるずころです。
    だっおシェルから実行するんですよね確実に決めおやりたすよね?。そういう芳点から䞋手にスクリプトの方で動くのは避けたした。
    そもそも堎合によっおは$0がスクリプトこずではない堎合があるので、䜿甚を避けおいたす。


    画像

    あずは䞋の方でコメント化しおいるのは無限ルヌプです。䟋えば、自䜜のボットなどを䜜った時に再起動させたいが、メむンのスクリプトが萜ちおしたうず自動的に再起動させられたせんよね
    ずいうこずで、終了コヌドが2以倖で終わった堎合は無限ルヌプするようなサンプルが曞き蟌んでありたす。
    私が配垃しおいるDiscordのボット甚の起動スクリプトはこちらが採甚されおいるはずです。

    create.sh

    次に環境構築バッチです。
    こちらは完党にWindowsの方ず同じです。
    仮想環境フォルダヌがない堎合は䜜成から行い。ある堎合はスキップしおラむブラリのむンストヌルだけを詊行したす。

    画像

    Windowsの時はタむムアりトを䜿っおシェルが閉じないようにしおいたしたが、Linuxの堎合はそもそもシェルから実行するのでそういったものは入っおいたせん。

    実際に実行しおみる

    正垞実行の堎合

    画像

    ゚ラヌになった堎合

    画像

    おたけ

    start.shを自動実行&定期実行する



    配垃

    今回玹介した仮想環境を利甚した起動バッチは配垃を行いたす。
    そのたたテキストで曞かないのは自動凊理かなんかで収集されおしたうのはなんか残念な気がするからです。

    配垃URL

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=Python自動環境構築バッチセット

    デヌタの䞭身

    配垃するデヌタには今回玹介した起動ず構築以倖にいく぀か䜜業甚のデヌタも远加したす。
    それぞれの䞭身はダりンロヌドしおからのお楜しみ

    画像
    画像
    • WIndows

      • requirements_䜜成
        その名の通りrequirements.txtを䜜成するだけのスクリプトです。
        "requirements"が、地味に長くお打぀のが面倒くさいので䜜りたした。

      • 初回甚䜜成
        そもそもツヌルを開発する時の仮想環境っおたっさらなものを甚意しおからむンストヌルを手動で実行したすよね。
        このバッゞを実行するず仮想環境を䜜った埌、プロンプトが戻っおきお操䜜ができるようになりたす。
        芁するに実隓環境䜜成甚ですね。

    • Linux

      • Linux.service
        systemdを䜿ったサヌビスずしお登録するためのファむルです。
        自分で䜜っおももちろんいいですが、テンプレずしお添付しおおきたす。

      • requirements_Create
        Windowsの方ず同じです。

    それではたたお䌚いしたしょう。
    ちなみにこのバッチの改良点があれば是非是非お寄せください。


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ