SSHの使えないレンタルサーバ環境でJinja2を使いたかったのですが、ドキュメントを読んだだけではインストールされているか分かりませんでした。
そのため、Bottleを使って、レンタルサーバ上のPythonモジュールを一覧表示してみました。
環境
レンタルサーバ
開発環境
- Windows7 x64
- Visual Studio Code 0.5.0
- Python 2.x
- Bottle 0.12.8
モジュールの一覧化
以下の記事を参考に 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
を使おうとしましたが、レンタルサーバ上ではうまく動作しませんでした。
- Checking a Python module version at runtime - Stack Overflow
- python - What is the correct way to share package version with setup.py and the package? - Stack Overflow
そのため、以下の記事を参考に 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
参考
内包表記