3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonモジュールの一覧化方法いろいろ

Posted at

1.この記事の内容

Pythonモジュール及びそのライセンスの一覧化を考える機会があり,調べた内容を記事に残します.
Pythonモジュールの一覧化と一言で言っても,pipでインストールしたパッケージを一覧化する方法や,importされたモジュールを一覧化する方法,モジュール間の依存関係を図示する方法など,様々なやり方があることを知りました.

2.Pythonモジュールを一覧化する方法

実行環境含む参考コードは下記に登録しています.

本記事では,一覧化の方法と実行例,留意点等の概略を記載します.

2-1.pipでインストールしたモジュールの一覧化

pipdeptreeでpipでインストールしたモジュールを依存関係を含めて一覧表示できます.

pipでインストールできます.

$ pip install pipdeptree

以下は実行結果の表示例です.

altair==4.2.0
  - entrypoints [required: Any, installed: 0.4]
  - jinja2 [required: Any, installed: 3.1.2]
    - MarkupSafe [required: >=2.0, installed: 2.1.1]
  - jsonschema [required: >=3.0, installed: 4.6.0]
    - attrs [required: >=17.4.0, installed: 21.4.0]
    - pyrsistent [required: >=0.14.0,!=0.17.2,!=0.17.1,!=0.17.0, installed: 0.18.1]
  - numpy [required: Any, installed: 1.22.4]
  - pandas [required: >=0.18, installed: 1.4.3]
    - numpy [required: >=1.21.0, installed: 1.22.4]
    - python-dateutil [required: >=2.8.1, installed: 2.8.2]
      - six [required: >=1.5, installed: 1.16.0]
    - pytz [required: >=2020.1, installed: 2022.1]
  - toolz [required: Any, installed: 0.11.2]
backports.functools-lru-cache==1.6.4
blinker==1.4
bokeh==2.4.3
  - Jinja2 [required: >=2.9, installed: 3.1.2]
    - MarkupSafe [required: >=2.0, installed: 2.1.1]
  - numpy [required: >=1.11.3, installed: 1.22.4]
  - packaging [required: >=16.8, installed: 21.3]
    - pyparsing [required: >=2.0.2,!=3.0.5, installed: 3.0.9]
  - pillow [required: >=7.1.0, installed: 9.1.1]
  - PyYAML [required: >=3.10, installed: 6.0]
  - tornado [required: >=5.1, installed: 6.1]
  - typing-extensions [required: >=3.10.0, installed: 4.2.0]

2-2.pipでインストールしたモジュールのライセンス一覧化

pip-licensesコマンドでモジュールのバージョン及びライセンスを一覧表示できます.

pipでインストールできます.

$ pip install pip-licenses

以下は実行結果の表示例です.

Name                           Version    License                                                          
 Babel                          2.10.3     BSD License                                                      
 Bottleneck                     1.3.4      BSD License                                                      
 Cython                         0.29.30    Apache Software License                                          
 HeapDict                       1.0.1      BSD License                                                      
 Jinja2                         3.1.2      BSD License                                                      
 Mako                           1.2.0      MIT License                                                      
 MarkupSafe                     2.1.1      BSD License                                                      
 Pillow                         9.1.1      Historical Permission Notice and Disclaimer (HPND)               
 PyJWT                          2.4.0      MIT License                                                      
 PySocks                        1.7.1      BSD                                                              
 PyWavelets                     1.3.0      MIT License                                             

2-3.Pythonコード実行中のimport済みモジュールの確認

sys.modulesにimport済みのモジュールが辞書型で格納されます.

import sys
sys.modules

Pythonコード中で,'<module名>' in sys.modulesとするなどで,特定のモジュールがimport済みであることを判定できます.

2-4.指定したPythonファイル内で使用されるモジュールの一覧化

Python標準のmodulefinderモジュールで,importされるモジュールの一覧を取得することができます.
ただし,原因は不明ですが,pandasやscikit-learnなど,読み込めないモジュールも存在するようです.
読み込めないモジュールに対してmofulefinderを実行した場合は,AttributeErrorを出力して動作が停止します.

modulefinderの使用例は公式ドキュメントがわかりやすいです.

2-5.指定したPythonファイルまたはディレクトリ内で使用されるモジュールの一覧化

pydepsコマンドを用いて,特定のPythonファイルまたはディレクトリを指定して,使用されるモジュールをグラフィカル表示できます.
modulefinderと同様に,表示できないモジュールも存在するようです.

pipでインストールできます.

$ pip install pydeps

複雑な依存関係を持つPythonファイルに対しては動作確認していませんが,下記のようなグラフを生成することができます.

  • 実行コマンド例
    $ pydeps --noshow -T png -o test_numpy.png lib/sample_module/test_numpy.py
    
  • 実行結果
    test_numpy.png

なお,ディレクトリを指定する場合は,指定したディレクトリ内に__init__.pyが必要なようです.

3.関連リンク

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?