28

グローバル サイト パッケージ ディレクトリにインストールする "example" というライブラリがあります。ただし、本番用とテスト用の 2 つのバージョンをインストールできるようにしたいと考えています (この方法でバージョン管理された Web アプリケーションとその他のものがあります)。

別の卵をサイトパッケージにインストールするだけでなく、モジュールの名前を「example」から「example_stage」などに変更する「python setup.py stage」などを指定する方法はありますか?

distutils でこれができない場合、他にできるツールはありますか?

4

4 に答える 4

56

これは、setup.py 内でdistutils.core.Commandをサブクラス化することにより、distutils で簡単に実行できます。

例えば:

from distutils.core import setup, Command
import os, sys

class CleanCommand(Command):
    description = "custom clean command that forcefully removes dist/build directories"
    user_options = []
    def initialize_options(self):
        self.cwd = None
    def finalize_options(self):
        self.cwd = os.getcwd()
    def run(self):
        assert os.getcwd() == self.cwd, 'Must be in package root: %s' % self.cwd
        os.system('rm -rf ./build ./dist')  

コマンドを有効にするには、setup() で参照する必要があります。

setup(
     # stuff omitted for conciseness.
     cmdclass={
        'clean': CleanCommand
}

'clean' で行ったように、組み込みコマンドもこの方法でオーバーライドできることに注意してください。(組み込みバージョンが「dist」および「build」ディレクトリを残す方法が気に入らなかった。)

% python setup.py --help-commands | grep clean
  clean            custom clean command that forcefully removes dist/build dirs.

使用される規則は多数あります。

  • コマンドライン引数はuser_optionsで指定します。
  • サブクラスのカスタム名前空間を設定するために、初期化後に呼び出される initialize_options()メソッドで使用する変数を宣言します。
  • finalize_options()メソッドは、run()の直前に呼び出されます。
  • コマンド自体の根幹はrun()で発生するため、その前に他の準備作業を必ず行ってください。

使用する最良の例は、 PYTHON_DIR/distutils/commandにあるinstall.pybuild.pyなどのデフォルト コマンドの 1 つのソース コードを調べることです。

于 2009-11-11T02:07:20.370 に答える
14

確かに、新しいコマンドで distutils を拡張できます。distutil 構成ファイルに、以下を追加します。

 [global]
 command-packages=foo.bar

これはdistutils.cfgdistutilsパッケージ自体、..pydistutils.cfgホーム ディレクトリ (Windows では先頭にドットはありません)、またはsetup.cfg現在のディレクトリにあります。

次に、Python の site-packages ディレクトリに foo.bar パッケージが必要です。

次に、そのパッケージに、 distutils.cmdstageをサブクラス化するなど、新しい目的のコマンドを実装するクラスを追加します。ドキュメントは弱いですが、既存のすべての distutils コマンドもそのように構築されているため、多くの例があります。

于 2009-11-11T00:41:01.093 に答える
5

複数のバージョンを使用したい場合は、virtualenvwrapperを使用したvirtualenvが役立ちます。

于 2009-11-10T21:14:38.520 に答える
2

distutilsでこれを行う方法が必要な場合は、Alex の回答を参照してください。カスタム コマンドを作成したり、既存のコマンドをオーバーライドしたりすることが非常に簡単になります。さらに、distutils や setuptools に慣れていれば、移行はそれほど難しくありません。

于 2009-11-11T00:43:57.050 に答える