2017-08-30 3 views
1

さまざまなプロジェクトで使用しているいくつかの補助モジュールがあります。たとえば、これらの補助モジュールには、ロギング、ファイル、デコレータなどのコードが含まれています。Pythonパッケージ化:ほとんどのプロジェクトで使用している補助モジュールの処理

個人的には、すべての補助モジュールをバンドルしてインストールするだけです。

私のプロジェクトをPyPIで公開したい場合、最も適切な方法は何ですか?補助モジュールをパッケージとして公開することは適切ですか?たとえバンドルするのが難しくても、他のプロジェクトを使用している場合を除いて誰かがインストールするのにはほとんど役に立ちませんが、それぞれの補助パッケージをインストールする必要があります私の他のプロジェクトの?

+1

大規模でない限り、メインプロジェクトの一部としてバンドルするほうが簡単でしょう。確かに、複数のプロジェクトをインストールする場合は、冗長ファイルがいくつかあるかもしれませんが、それはおそらく最大でもキロバイトです。 – Amber

+0

@Amber多分ばかげた質問に申し訳ありませんが、私はパッケージングが初めてですが、ファイルをコピーせずにメインプロジェクトにバンドルするにはどうすればいいですか? – Bananach

答えて

1

たとえばkrux/tcp-stream-kafka-producerためkrux/java-stdlibに基づいており、独立した「プロジェクト」/パッケージにこれらのようなライブラリを分割することは珍しいことではありません(ランダム例 - 私は昨日のレポを閲覧されたという理由だけで...)

ので、私はあなたにユーティリティを<something>-util(または "various"、または "stuff" :)と命名し、それらをpipy上のモジュールとして別々にリリースすることをお勧めします。これは、異なるプロジェクトがそのライブラリの複数のコピーを維持したり、明確なバージョン/依存関係を維持しなくても、下層のlibの異なるバージョンを使用できるようにするので、これを行うためのよりクリーンな方法です。

あなたの他のオプション:

  1. は、最も人気のあるプロジェクトでライブラリを含める:これは本当に意味がありません依存関係をプロジェクトにつながります。たとえば、そのプロジェクトがメジャーバージョンを変更した場合、依存プロジェクトは影響を受けていますか?

  2. あなたが使っているプロジェクトごとにコピーしてください:これは短期間やいくつかのプロジェクトでは問題ありませんが、間もなく変更の履歴が失われ、共通ファイルが同期しなくなります。私はこれまでにやったことがあります。あなたがすでに別のプロジェクトにパッチを当てたものをデバッグするのに数時間を費やすのは非常に面倒です!

私は別のパッケージとしてそれを解放すると見る唯一の欠点は、あなたが競合に注意しなければならないことである:Bプロジェクトは、他の方法で回避されながら、プロジェクトすなわちv0.1.1なくv0.1.0を必要とします。ありがたいことに、python venvは、このような場合に役立ちます。

希望します。

+1

もしあなたがpypiに '役に立たない'パッケージをアップロードすることを心配しているのであれば、すべてのユーティリティファイルを使ってgit repoを作成し、そのリポジトリをあなたの依存関係に追加することができます。 – orangeInk

+0

@urbanありがとうございます。最後の段落について:エンドユーザーに仮想環境を自分で作成させることなく、仮想環境内にsetuptoolsをインストールする方法を説明するリンクがありますか? – Bananach

+0

@Bananach 'venv'は、競合/リリースを処理する場合、問題を整理します。エンドユーザーがいる場合、私は最良のアプローチについて100%確信していません。そのような場合に私が通常行うことは、 'composer'(php)のようなアプローチに従います。 - install.sh/Makefileを使って、' /vendor/'の依存関係をダウンロードしてパスに含めます。Python/setuptoolsはこれを行うための "公式の"方法を持っているかもしれません – urban

関連する問題