web-dev-qa-db-ja.com

Python:1つのリポジトリに複数のパッケージ、またはリポジトリごとに1つのパッケージ?

私は大きなPython 3.7+プロジェクトを持っており、現在それを個別にインストールできる複数のパッケージに分割する過程にあります。私の最初の考えは、複数のパッケージを持つ単一のGitリポジトリを持つことでした、それぞれ独自のsetup.pyを持っています。しかし、Googleでいくつかの調査をしている間に、パッケージごとに1つのリポジトリを提案する人々を見つけました:(たとえば、 Python-setuptools-2つの依存パッケージでの作業( single repo?) )しかし、なぜそのような構造を好むのかについては、誰も良い説明をしていません。

だから、私の質問は次のとおりです:

  • 同じGitHubリポジトリに複数のパッケージ(それぞれに独自のsetup.pyが含まれる)があると、どのような影響がありますか?
  • このような設定で問題が発生するでしょうか?
  • 一般的なPythonツール(ドキュメントジェネレーター、pypiパッケージなど))は、このような設定と互換性がありますか?
  • あるセットアップを他のセットアップよりも好む正当な理由はありますか?
  • これは意見に基づく質問ではないことに注意してください。技術的な問題や、2つのアプローチのいずれかに問題があるかどうかを知りたいです。

また、setup.pyのGitHub URLがリポジトリのルートにない場合でも、setuptoolsがGitHubリポジトリから依存関係をインストールできるようになったことも知っています(間違っている場合は修正してください)。

7
AstrOne

同じ問題を自分で研究しています。 PyPaのドキュメントでは、次の「ネイティブ」サブディレクトリで説明されているレイアウトを推奨しています: https://github.com/pypa/sample-namespace-packages

以下で説明する単一のパッケージ構造は非常に便利です。「インストール済み」バージョンのテストに関する説明を参照してください。 https://blog.ionelmc.ro/2014/05/25/python-packaging/#the-structure これは複数のパッケージに拡張できると思います。詳細をお知らせします。

1
boriska

ここでは1つの側面について説明します https://pip.readthedocs.io/en/stable/reference/pip_install/#vcs-support

特に、setup.pyがルートディレクトリにない場合は、pip installコマンドでsetup.pyを見つけるサブディレクトリを指定する必要があります。

したがって、リポジトリのレイアウトが次の場合:

  • pkg_dir /
    • setup.py#パッケージpkgのsetup.py
    • some_module.py
  • other_dir /
    • some_file
    • some_other_file

Pip install -e vcs + protocol:// repo_url /#Egg = pkg&subdirectory = pkg_dirを使用する必要があります。

1
Teitur