5

私は現在Pythonコードをデプロイする方法に満足しておらず、もっと良い方法があるかどうか疑問に思っていました。最初に私がしていることを説明し、次に欠点を説明します。

  • 開発するときは、virtualenvを使用して依存関係を分離し、pipを使用してすべてのライブラリをインストールします。Python自体は私のOS(Ubuntu)から来ています
  • 次に、ソースツリーと依存関係のpipバンドルで構成される「.deb」debianパッケージにコードをビルドします。
  • 次に、デプロイするときに、virtualenv環境を再構築し、foo / bin / activateをソースしてから、プログラムを実行します(Ubuntuのアップスタートの下で)

ここに問題があります:

  1. pipバンドルはかなり大きく、debianパッケージのサイズを大幅に増やします。これは大したことではありませんが、面倒です。
  2. デプロイするたびに、すべてのCライブラリ(PyMongo、BCryptなど)をビルドする必要があります。これには少し時間がかかり(数分)、本番環境でこのCPUバウンドジョブを実行するのは少し手間がかかります

これが私の制約です:

  1. Python3で動作する必要があります。できれば3.2
  2. 依存関係を分離する必要があります
  3. Cを使用するライブラリ(PyMongoなど)で動作する必要があります

凍結について聞いたことがありますが、これを機能させることができませんでした。Pypiからのcx_freezeはコンパイルされていないようです(少なくとも私のPythonでは)。他のフリーズユーティリティはPython3では機能しないようです。どうすればこれを改善できますか?

4

2 に答える 2

1

現時点では、ホイールがおそらくこれを行うための最良の方法です。

デプロイメントマシン上にvirtualenvを作成し、そのvirtualenvへの依存関係(ホイールとしても構築されている)とともにホイールをデプロイします。

これにより、問題が解決します。

  1. 依存関係に個別のホイールがあるということは、変更されていない依存関係を再デプロイする必要がないことを意味し、デプロイメントアーティファクトのサイズを削減します
  2. 大きなパッケージ(lxmlやscipyなど)のビルドはローカルで実行でき、コンパイルされたホイールは本番環境にプッシュされます

また、Cを使用するライブラリでも正常に機能します。

于 2013-06-01T22:49:20.100 に答える
0

ビルドアウト(zc.buildout)を見たことがありますか?カスタムレシピを使用すると、これのほとんどを自動化できる場合があります。

于 2012-12-02T17:47:20.913 に答える