メインコンテンツへスキップ
見出し画像

Python基礎7:システムパラメータ/パス管理(sys)

    1.概要

     システムパラメータやパス管理ができるPython標準ライブラリのsysを紹介します。

    2.パス(環境変数)とは

     初めにCMDコマンドプロンプトでnotepadを入力してみるとメモ帳が立ち上がります。PCがメモ帳(notepad)を立ち上げることができた理由は、notepadの場所(正確には探す場所)を覚えており、その中からnotepadを探したためです。

    画像

     ここでのパスとはPCが記憶する場所であり「パスを通す」とはPCが選択する箇所を覚えさえることになります。逆に言うとパスが通ってないとPCは探す場所がわからないためファイル/ディレクトリを検索できません。
     参考までにパスの通し方は下記の通りです。

    3.モジュールの検索パス:sys.path

     モジュール(Pythonファイル)が検索するパスを確認するにはsys.pathを使用します。実行個所は下記フォルダ内の”note_sys.ipynb”で実施しています。

    画像
    [In]
    import sys
    
    sys.path
    
    [Out]
    ['c:\\Users\\KIYO-\\Desktop\\note\\note_sys',
     'C:\\Users\\KIYO-\\anaconda3\\python39.zip',
     'C:\\Users\\KIYO-\\anaconda3\\DLLs',
     'C:\\Users\\KIYO-\\anaconda3\\lib',
     'C:\\Users\\KIYO-\\anaconda3',
     '',
     'C:\\Users\\KIYO-\\anaconda3\\lib\\site-packages',
     'C:\\Users\\KIYO-\\anaconda3\\lib\\site-packages\\locket-0.2.1-py3.9.egg',
     'C:\\Users\\KIYO-\\anaconda3\\lib\\site-packages\\win32',
     'C:\\Users\\KIYO-\\anaconda3\\lib\\site-packages\\win32\\lib',
     'C:\\Users\\KIYO-\\anaconda3\\lib\\site-packages\\Pythonwin',
     'C:\\Users\\KIYO-\\anaconda3\\lib\\site-packages\\IPython\\extensions',
     'C:\\Users\\KIYO-\\.ipython',
     'C:\\Users\\KIYO-\\AppData\\Roaming\\Python\\Python39\\site-packages']

     検索パスを確認すると「実行ファイルとカレントディレクトリが一番最初に検索され、その後はリスト順に検索」されることがわかります。sys.pathはリスト形式のため後述する通りパスを追加することが可能です。

    3.検索パスを追加:sys.path.append()

     前章の通りカレントディレクトリは”環境変数の設定”をしなくても検索パスとして扱われますが、それ以外はパスが通ってないと検索ができません。 
     Pythonでパスを通す場合はsys.path.append('path')を使用します。

    【パスを通すときの注意点】
    ●ファイル実行時だけパスを通すためファイルを閉じるとパスの設定はリセットされます。
    ●sys.pathのリストにappendするため指定パスは一番後ろに入力されます。つまり市さん最後に検索されるため、前の検索パスと干渉しないことを確認する必要があります。

    [In]
    import sys
    
    sys.path.append(r'.KIYO/適当に名前つけたよ')
    sys.path[-1] #リストの一番最後の値を取得
    
    [Out]
    '.KIYO/適当に名前つけたよ'

     検索パスの追加(sys.pathの編集)方法として「環境変数PYTHONPATH」があります。触ってみたけど難しかったので紹介まで。

    4.コマンドラインから引数を取得:sys.argv

     (Jupyterではなく)pythonファイルをターミナルから実行するときに引数を渡したい場合はあります。引数を渡す場合はsys.argvを使用します。
     ターミナル経由でsys.argvを使用するとリスト形式で['モジュール名']が渡され、引数を記載すると['モジュール名', '引数']で渡されます。よってターミナルから引数を取得したい場合はsys.argv[1]となります。

    [In] notesys.py
    import sys 
    
    print(sys.argv)
    
    [Out]
    ['ファイル名', '引数1', '引数2'・・・ ]
    詳細は下記参照
    画像

    参考記事

    あとがき

     前記事からsysだけ分離しました。


     
     

    KIYO

     
     
    普段は製造業で企画/開発/設計しております。記事はプログラミング・機械学習、IoT関係の記事をメインで作成し、なるべく1つの記事で知りたいことを網羅していきます。内容は学術的より実装・アウトプット(ほしくなるもの)を重視して作成しています。 面白そうな仕事があればやりたいです!

    あなたへのおすすめ