コードのパッケージ化

コードをパッケージ化して、他の開発者と共有します。例えば、他の開発者が自分のアプリケーションで使うためのライブラリや、 ‘py.test’ のような開発ツールを共有するためです。

PyPIやpipなどのツールによる配布方法の利点は、他の開発者達にあなたのパッケージのインストールとダウンロード、カジュアルな実験、大規模で専門的なシステムの一部としての使用を簡単に行え、エコシステムとして確立されています。

この方法でPythonコードを共有するのは、定評のある規約です。コードがPyPIにパッケージ化されていない場合、他の開発者がコードを見つけて既存のプロセスの一部として使用することは難しくなります。彼らは、このようなプロジェクトについては、管理や放棄の疑いが強いとみなします。

このようにコードを配布することの欠点は、必要なバージョンのPythonをインストールする方法と、pyなどのツールを使用してコードの他の依存関係をインストールすることができることを受信者が理解していることです。 これは他の開発者に配布する場合は問題ありませんが、この方法はアプリケーションをエンドユーザーに配布する場合には不適切です。

Pythonパッケージングガイド には、Pythonパッケージの作成と保守に関する広範なガイドがあります。

パッケージングの代替案

アプリケーションをエンドユーザに配布するには、以下を行う必要があります。 freeze your application

Linuxでは、Linuxディストリビューションパッケージ の作成 (例:DebianやUbuntu用の.debファイル) を参考にしてください。

Pythonデベロッパー向け

オープンソースのPythonモジュールを書いているなら、PyPI と呼ばれ、よりよく知られている The Cheeseshop は、それをホストする場所です。

Pip vs. easy_install

pip を使用してください。 詳細は ここ

パーソナルPyPI

PyPI以外のソースからパッケージをインストールする場合(例えば、パッケージが proprietary の場合)、インストールが必要なパッケージを保持するディレクトリから実行される単純なhttpサーバをホストすることによって実行できます。

例を示すことは常に有益です

たとえば、 MyPackage.tar.gz という名前のパッケージをインストールし、それがあなたのディレクトリ構造であると仮定すると:

  • archive
    • MyPackage
      • MyPackage.tar.gz

コマンドプロンプトで次のように入力します:

$ cd archive
$ python -m SimpleHTTPServer 9000

これは、ポート9000で実行される単純なhttpサーバーを実行し、MyPackage などのすべてのパッケージをリストします。 これで、Pythonパッケージインストーラを使用して MyPackage をインストールできます。 Pipを使用すると、次のようになります。

$ pip install --extra-index-url=http://127.0.0.1:9000/ MyPackage

パッケージ名と同じ名前のフォルダを持つことは、ここでは 非常に重要です。 私は一度それに騙された。 しかし、MyPackage という名前のフォルダを作成し、MyPackage.tar.gz冗長 にしておくと、MyPackageをインストールすることができます:

$ pip install  http://127.0.0.1:9000/MyPackage.tar.gz

pypiserver

Pypiserver はPyPI互換の最小限のサーバです。 これは、easy_installまたはpipにパッケージのセットを提供するために使用することができます。 管理コマンド(-U)のような便利な機能が含まれており、すべてのパッケージをPyPI上の最新バージョンに更新します。

S3-Hosted PyPi

パーソナルPyPiサーバのための簡単なオプションの1つは、Amazon S3を使用することです。これの前提条件は、S3バケットを備えたAmazon AWSアカウントを持っていることです。

  1. PyPiまたは別のソースからすべての要件をインストールする
  2. pip2piをインストールする
  • pip install git+https://github.com/wolever/pip2pi.git
  1. pip2tgzおよびdir2piコマンドの場合はpip2pi READMEに従ってください。
  • pip2tgz packages/ YourPackage (or pip2tgz packages/ -r requirements.txt)
  • dir2pi packages/
  1. 新しいファイルをアップロードする
  • Cyberduckのようなクライアントを使って packages フォルダ全体をs3バケットに同期させます
  • あなたは必ず packages/simple/index.html と全ての新しいファイルとディレクトリをアップロードしてください
  1. 新しいファイルのアクセス許可を修正する
  • デフォルトでは、S3バケットに新しいファイルをアップロードすると、不正なアクセス権が設定されます。
  • Amazon Webコンソールを使用して、ファイルのREAD権限をEVERYONEに設定します。
  • パッケージをインストールしようとしたときにHTTP 403が表示された場合は、アクセス権を正しく設定してください。
  1. すべて完了
  • あなたは今あなたのパッケージをインストールすることができます pip install --index-url=http://your-s3-bucket/packages/simple / YourPackage

Linuxディストリビューションの場合

Linuxディストリパッケージを作成することは、間違いなくLinux上でコードを配布する「正しい方法」です。

ディストリビューションパッケージにはPythonインタプリタが含まれていないので、ダウンロード約2MBをインストールします freezing your application

また、ディストリビューションがPython用の新しいセキュリティアップデートをリリースすると、その新しいバージョンのPythonを使ってアプリケーションが自動的に起動します。

bdist_rpmコマンドは、Red HatやSuSEのようなディストリビューションで使用する RPMファイルを生成すること は簡単です。

しかし、各ディストリビューションのフォーマット(Debian / Ubuntuの場合は.deb、RedHat/Fedoraの場合は.rpmなど)に必要なさまざまな設定を作成し、維持することは相当量の作業です。コードが他のプラットフォームで配布する予定のアプリケーションである場合は、WindowsとOSX用にアプリケーションをフリーズするために必要な別の設定を作成して維持する必要があります。クロスプラットフォーム フリーズツール のいずれかのために、Linuxのすべてのディストリビューションのためのスタンドアロンの実行可能ファイルを生成する単一の設定を作成して維持するだけでは、 WindowsとOSXだけでなく、

配布パッケージを作成することは、あなたのコードが現在配布物でサポートされていないバージョンのPython用である場合にも問題になります。 Ubuntuエンドユーザの いくつかのバージョン‘dead-snakes’ PPA sudo apt-repository を追加する必要があることを伝える必要があります コマンドを使用して.debファイルをインストールする前に、非常に敵対的なユーザーエクスペリエンスを作ります。 それだけでなく、すべてのディストリビューションでこれらの手順に相当するカスタムを維持しなければならず、さらに悪いことに、ユーザーに読んで理解させ、行動させる必要があります。

すべてのことを言って、ここでそれを行う方法です:

便利なツール