本記事では、インストール済のライブラリ(パッケージ)のライセンス情報、説明、URLを取得して、csvファイルへ出力するPythonスクリプトを載せました。
■ライブラリ「pip-licenses」を次のようにpipでインストールします
pip install pip-licenses
本スクリプトを実行すると、下図のように左から順に、Pythonライブラリ名,バージョン,ライセンス名,パッケージの説明,URLをcsvへ出力します。

■本スクリプト
import os
import subprocess
import io
import pandas as pd
import datetime
now = datetime.datetime.now()
now = now.strftime("%y%m%d")
print(now)
cmd_list = ['pip-licenses', '-d', '-u']
my_env = os.environ.copy()
my_env["PYTHONIOENCODING"] = 'utf-8'
result = subprocess.run(
cmd_list,
encoding = 'utf-8',
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
env = my_env,
)
f = io.StringIO(result.stdout)
row_list = []
for i, s in enumerate(f):
buf_list = s.split()
if i == 0:
new_buf_list = buf_list.copy()
else:
buf_str = ' '.join(buf_list[2:])
if 'http' in buf_str:
cnt_http = buf_str.find('http')
else:
cnt_http = buf_str.find('UNKNOWN')
my_license = buf_str[:(cnt_http - 1)]
buf_url = buf_str[cnt_http:]
cnt_space = buf_url.find(' ')
my_url = buf_url[:cnt_space]
my_description = buf_url[(cnt_space + 1):]
new_buf_list = buf_list[:2] + [my_license, my_url, my_description]
row_list.append(new_buf_list)
df = pd.DataFrame(
row_list[1:],
columns = row_list[0],
)
df
df2 = df.copy()
df2 = df2.iloc[:, [0, 1, 2, 4, 3]]
df2
df2_unk = df2.query('License.str.contains("UNKNOWN")', engine = 'python')
df2_unk
df2_unk['License'] = 'UNKNOWN'
df2_unk
target_index = df2_unk.index.to_list()
target_index
df3 = df2.drop(target_index)
df3
df4 = pd.concat([df3, df2_unk])
df4
df_s = df4.sort_index()
df_s.to_csv(now + '_python_package_license.csv', index = False)
df_s
license_list = df_s.groupby('License').count().index.to_list()
print(license_list)
以上
<広告>
リンク
リンク