Pythonモジュールを構造化するためのルールとは?プロジェクト構成のベストプラクティス
Pythonプロジェクトを整理された形で構築するには、定評のあるディレクトリ構造を採用するのが効果的です。ここでは、Kenneth Reitz氏が公開しているサンプルプロジェクト「samplemod」を例に、優れたプロジェクト構成の方法を紹介します。このプロジェクトは「sample」モジュールを作成するもので、ディレクトリ構造は以下のようになっています。
README.rst LICENSE setup.py requirements.txt sample/__init__.py sample/core.py sample/helpers.py docs/conf.py docs/index.rst tests/test_basic.py tests/test_advanced.py
各ファイル・ディレクトリの役割
README.rst
モジュールの概要説明、セットアップ手順、使い方などを記載するファイルです。プロジェクトの「顔」となるドキュメントなので、最初に読まれることを意識して、簡潔かつ分かりやすくまとめましょう。
LICENSE(ライセンス)
ライセンス本文や著作権に関する記述を含むファイルです。オープンソースとして公開する場合は、適切なライセンスを選択して明記することが重要です。
setup.py
Pythonにおけるマルチプラットフォーム対応のインストーラーであり、Makefileに相当する役割を果たすファイルです。コマンドラインでのインストールに慣れている方なら、「make && make install」が「python setup.py build && python setup.py install」に相当すると考えると分かりやすいでしょう。ユーザーのマシン上でプロジェクトをビルドするために使用されます。
requirements.txt
Pipのrequirementsファイルは、プロジェクトへの貢献に必要な依存パッケージ(テスト、ビルド、ドキュメント生成など)を指定します。プロジェクトに開発用の依存関係がない場合や、setup.py経由で開発環境を構築したい場合は、このファイルは必須ではありません。
docs/(ドキュメントディレクトリ)
プロジェクトのドキュメントを格納するディレクトリです。Sphinxなどのドキュメント生成ツールを使って、APIリファレンスやチュートリアルを管理するのが一般的です。
tests/(テストディレクトリ)
すべてのテストコードはこのディレクトリに配置します。最初は単一のテストファイルから始めても問題ありませんが、テストが増えてきたら、モジュール本体のディレクトリ構造に合わせてテストも整理すると、保守性が高まります。
sample/(モジュール本体)
実際のモジュールコードを格納するディレクトリです。モジュールが単一ファイルのみで構成される場合は、sample.pyという名前でリポジトリのルート直下に置いても構いません。ライブラリのコードを曖昧なsrcやpythonといったサブディレクトリに配置するのは避けましょう。また、モジュールをパッケージとして扱いたい場合は、__init__.pyファイルを含める必要があります。
-
.bashrcファイルとは?役割と活用方法を徹底解説
Linuxをしばらく使っている方、特にコマンドラインに慣れ始めた方なら、BASHがLinuxのシェルであることをご存じでしょう。BASHは「Bourne Again Shell」の略です。シェルにはcsh、zsh、dash、kornなど、さまざまな種類が存在します。シェルとは、ユーザーからコマンドを受け取り、それを実行してファイルシステム内の移動、プログラムの実行、デバイスとのやり取りといった操作を行うインタープリタのことです。Debian自体、Ubuntu、Linux Mintなど、多くのDebian系Linuxディストリビューションでは、BASHの代わりにDASHがシェルとして採用されてい
-
Pythonの「モジュール」と「パッケージ」の違いとは?初心者向けにわかりやすく解説
モジュールとパッケージの基本的な違いPythonでは、任意の .py ファイルはすべてモジュールとして扱われます。モジュール名は、拡張子 .py を除いたファイル名そのものであり、モジュール内部では __name__ 属性として参照できます。一方、パッケージとは複数のPythonモジュールをまとめたものです。具体的には、モジュール群が格納されたディレクトリに __init__.py ファイルが配置されているものを指します。この __init__.py の存在こそが、単なる「Pythonスクリプトの入ったフォルダ」と「パッケージ」を区別する目印となります。また、各階層のディレクトリにそれぞれ _