読者です 読者をやめる 読者になる 読者になる

SSHが使えないレンタルサーバで、Pythonモジュールを一覧表示してみた

Python Bottle

SSHの使えないレンタルサーバ環境でJinja2を使いたかったのですが、ドキュメントを読んだだけではインストールされているか分かりませんでした。

そのため、Bottleを使って、レンタルサーバ上のPythonモジュールを一覧表示してみました。

 

環境

レンタルサーバ

 

開発環境

 

モジュールの一覧化

以下の記事を参考に pkgutil.iter_modules() を使って、Bottleで一覧を表示してみました。
利用可能なモジュール一覧を取得する - Study08.net 対シンバシ殲滅用人型機動兵器

試しに、内包表記ある版とない版を書いてみました。

@route('/all_modules')
def all_modules():
    return ", ".join([module[1] for module in pkgutil.iter_modules()])
    
    # 内包表記なし版
    # result = ""
    # for module in pkgutil.iter_modules():
    #     result += module[1] + ', '
    # return result

 

モジュールのバージョン確認

せっかくなので、使用しているモジュールのバージョンも確認しようと考えました。

まずはpkg_resources.get_distribution().versionを使おうとしましたが、レンタルサーバ上ではうまく動作しませんでした。

 
そのため、以下の記事を参考に pkgutil.iter_modules() を使って、Bottleで現在動作しているスクリプトで動いているモジュールとバージョンを表示してみました。
How to check version of python modules? - Stack Overflow

試しに、lambda式と内包表記のある版とない版を書いてみました。

@route('/running_modules')
def running_modules():
    formatter = lambda n, m: "{name}:{version}".format(name=n, version=m.__version__)
    modules = [formatter(name, module) for name, module in sorted(sys.modules.items()) if hasattr(module, '__version__')]
    return ", ".join(modules)
    
    # lambda & 内包表記なし版
    # result = ""
    # for name, module in sorted(sys.modules.items()): 
    #     if hasattr(module, '__version__'):
    #         result += "{name}:{version}, ".format(name=name, version=module.__version__)  
    # return result

 
上記を動かしてみたところ、レンタルサーバ上にはJinja2がインストールされていました。

 

ソースコード

module_list.pyとして、GitHubに上げておきました。
thinkAmi-sandbox/Bottle-sample

 

参考

内包表記

 

formatメソッド