33

私はPythonライブラリアプリ(いくつかの* .pyファイルを含む)を作成しました。そして、私のPythonプロジェクトのいくつかは、ライブラリアプリでコードを再利用する必要があります。Pythonコードを再利用するための推奨されるベストプラクティスは何ですか?現在、私は3つのオプションを考えました。

  1. コピーアンドペースト。これはベストプラクティスからはほど遠いです。DRYの原則に違反しています(繰り返さないでください)。
  2. ライブラリアプリのフォルダーを環境変数PYTHONPATHに追加しますexport PYTHONPATH=/path/to/library/app。次に、同じコンピューター上のすべてのプロジェクトがライブラリアプリのコードを参照できます。
  3. そして、Pythonコードのsys.pathへのライブラリアプリのフォルダ:sys.path.append('/path/to/library/app')

上記の3つのオプションのうち、どれを好みますか?他の2つのオプションと比較してどのような利点がありますか?他にもっと良いオプションはありますか?Python開発の長年の経験を持つ人がこの質問に答えることができれば非常にありがたいです。

4

4 に答える 4

46

4番目の代替案を提案させてください。時間をかけてライブラリをパッケージ化し、サイトパッケージにインストールする方法を学びましょう。思ったより簡単で、よく過ごした時間だと思います。これは非常に良い出発点です:https ://packaging.python.org/en/latest/

于 2011-08-05T13:13:10.307 に答える
5

3つのオプションのうち、PYTHONPATHが最適です。コピーアンドペーストは明らかに行われており、sys.pathを変更するコードを他のプロジェクトに追加すると、それらのファイルが環境に関する知識で汚染されるだけです。

4番目のオプションは、共通コードから真のインストール可能なパッケージを作成し、それをPythonインストールにインストールすることです。次に、他のサードパーティのインストールコードと同じように、これらのモジュールをインポートするだけです。

于 2011-08-05T13:13:24.853 に答える
3

共有ライブラリの場合は、パッケージ化してサイトパッケージに追加する必要があります。そうすれば、何も設定する必要はありません。これが最良のオプションです。


サイトパッケージを使用したくない場合は、PYTHONPATHを使用してください。それが存在する理由であり、それはあなたが望むことをする方法です。


site.addsitedirの使用を検討することをお勧めします。path.appendは重複を防ぎません。また、.pthファイルを活用することもできます。

を介してPYTHONPATHに動的に設定/追加sys.pathすると同じ結果が得られますが、新しいライブラリを再利用することを選択した場合、処理が複雑になる可能性があります。また、パスが変更された場合にも問題が発生します。コードと環境変数を変更する必要があります。完全に必要な場合を除いて、Pythonパスを動的に設定しないでください。


コピー&ペーストは再利用パターンではありません。複製しているものを再利用したり、メンテナンスを増やしたりすることはありません。

于 2011-08-05T13:06:40.903 に答える
2

最初の方法は、ご存知のように、よく知られている問題が無数にあるため、ほとんど受け入れられません。

他の2つには独自の問題があります。手始めに、ファイルが移動するときに手動で作業する必要があり(アプリケーションロジックと混合する場合、つまり、実行するコンピューターに残すのではなく* .pyファイルに入れる場合は特に悪い)、固定のインストール場所(絶対パス)が必要です。 )または少なくとも特定のディレクトリ構造(相対パス)。私見ですが、これらの方法は、アプリケーションが他の場所に移動しない場合にのみ受け入れられます。それが必要になったらすぐに、既存のソリューションを使用しない理由の1つとして、既存のソリューションをあきらめて使用する必要があります。これは、小規模なローカルスクリプトではやり過ぎであり、もはや適用されません。

すでに自立型ライブラリとして扱っていると思われる共通部分(良い!)を作成します。これは、それ自体が本格的なプロジェクトでありsetup.py、単一のコマンドでクロスプラットフォームの方法でPYTHONPATHにインストールおよび追加できます。 。実際にPyPIで公開する必要はありませんが、将来気が変わった場合に公開するのが簡単になります。そうして、プロジェクトの一部をPyPIで公開する場合は、問題のプロジェクトとその依存関係をすべての潜在的なユーザーにとって簡単にインストールできるようにします。

于 2011-08-05T13:12:55.250 に答える