カスタム distutils コマンド
-
19-09-2019 - |
質問
「example」というライブラリがあり、グローバル サイト パッケージ ディレクトリにインストールしています。ただし、実稼働用とテスト用の 2 つのバージョンをインストールできるようにしたいと考えています (Web アプリケーションなど、この方法でバージョン管理されているものがあります)。
たとえば、サイトパッケージに別のeggをインストールするだけでなく、モジュールの名前を「example」から「example_stage」などに変更する「python setup.py stage」を指定する方法はありますか?
distutils がこれを実行できない場合、それができる他のツールはありますか?
解決
確かに、新しいコマンドを使用して distutils を拡張できます。distutil 構成ファイルに以下を追加します。
[global]
command-packages=foo.bar
これは入ることができます distutils.cfg
の中に distutils
パッケージ自体、 ..pydistutils.cfg
ホーム ディレクトリ内 (Windows では先頭にドットはありません)、または setup.cfg
現在のディレクトリにあります。
次に、Python の site-packages ディレクトリに foo.bar パッケージが必要です。
次に、そのパッケージに、次のような新しい必要なコマンドを実装するクラスを追加します。 stage
, 、サブクラス化 distutils.cmd -- ドキュメントは貧弱ですが、既存の distutils コマンドもすべてそのように構築されているため、サンプルが豊富にあります。
他のヒント
これは、distutils をサブクラス化することで簡単に実行できます。 distutils.core.コマンド setup.py内。
例えば:
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.
使用される規則が多数あります。
- コマンドライン引数は次のように指定します。 ユーザーオプション.
- で使用する変数を宣言します。 初期化オプション() このメソッドは、初期化後にサブクラスのカスタム名前空間を設定するために呼び出されます。
- の ファイナライズオプション() メソッドは直前に呼び出されます 走る().
- コマンド自体の根性は、 走る() その前に他の準備作業を必ず行ってください。
使用する最良の例は、次の場所にあるデフォルト コマンドの 1 つのソース コードを参照することです。 PYTHON_DIR/distutils/コマンド のような install.py または build.py.
あなたは複数のバージョンを使用したい場合は、 virtualenvのを持つ<のhref = "HTTP :のvirtualenvwrapper //www.doughellmann.com/projects/virtualenvwrapper/」のrel = "noreferrerは">を助けることができます。
。をhref="https://stackoverflow.com/questions/1710839/custom-distutils-commands/1712268#1712268">が、参照してください。私は舗装にこの種のもののために優れていることがわかります。それは非常に簡単にカスタムコマンドを作成するか、既存のものを上書きすることができます。あなたはdistutilsのかsetuptoolsのに慣れている場合はプラスの移行はそれほど難しいことではありません。