メモ_Pythonプロジェクトでソースコード群だけからrequirements.txtを生成する前準備

Pythonプロジェクトでソースコード群だけからrequirements.txtを生成する前準備のメモです。

githubなどからソースコードだけは取得できる状況で、手元には真っ新なPython環境しかなくて(出先で借りたパソコンで google colabとか)、requirements.txt なども整備していなかった場合、後からrequirements.txtを生成して実行環境をなんとかするための前準備として、ソースコードを解析して利用しているパッケージやライブラリの一覧を取得するコードが以下です。

当然、プロジェクト用に自作したパッケージやライブラリも一覧として取得されてしまうので、それらは手動で除去する必要があります。

コード

import os
import re

def find_imports_in_file(file_path):
    with open(file_path, "r", encoding="utf-8") as file:
        content = file.read()
        import_statements = re.findall(r"(?:from|import)\s+([\w\.]+)", content)
        return import_statements

def find_all_imports_in_directory(directory):
    imports = set()
    for root, _, files in os.walk(directory):
        for file in files:
            if file.endswith(".py"):
                file_path = os.path.join(root, file)
                import_statements = find_imports_in_file(file_path)
                imports.update(import_statements)
    return imports

def generate_requirements_txt(import_list, output_file):
    with open(output_file, "w") as file:
        for package in import_list:
            file.write(package + "\n")

target_directory = "path/to/your/code/directory"
import_list = find_all_imports_in_directory(target_directory)
requirements_output_file = "requirements.txt"
generate_requirements_txt(import_list, requirements_output_file)
結果

requirements.txtというファイルが生成されるので、あとはそれを開いて編集してrequirements.txtを完成させていきます。

趣味や実験的なプロジェクトでも、面倒くさがらずに普段からrequirements.txtをきちんと整備していれば良いだけなのですが(汗)