2009-09-18 5 views
7

Pythonパッケージ(init.dスクリプトのインストール、ディレクトリやファイルの作成など)をインストールするだけでなく、私のsetup.pyにカスタム動作をさせたいのですが、自分自身でdistutils/setuptoolsクラスをカスタマイズすることができます。行動。私が抱えている問題は、パッケージディレクトリに移動して "python setup.py install"を実行するとすべて動作することですが、 "easy_install mypackage.tar.gz"を実行するとカスタムクラスが実行されていないようです。ここに私のsetup.pyファイルは(テストするために、同じディレクトリ内の空myfoobar.pyファイルを作成します)です:easy_installをsetup.pyでカスタムコマンドを実行するには?

import setuptools 
from setuptools.command import install as _install 

class install(_install.install): 
    def initialize_options(self): 
     _install.install.initialize_options(self) 

    def finalize_options(self): 
     _install.install.finalize_options(self) 

    def run(self): 
     # Why is this never executed when tarball installed with easy_install? 
     # It does work with: python setup.py install 
     import pdb;pdb.set_trace() 
     _install.install.run(self) 

setuptools.setup(
    name = 'myfoobar', 
    version = '0.1', 
    platforms = ['any'], 
    description = 'Test package', 
    author = 'Someone', 
    py_modules = ['myfoobar'], 
    cmdclass = {'install': install}, 
) 

同じことは、私は、「セットアップ」とはdistutilsから「インストール」をインポートする場合にも発生します。どのようにアイデアをeasy_install私のカスタムクラスを実行することができますか?

明確にするために、私はBuildoutやPaverのような余分なものを使いたくありません。

答えて

4

できません。 Enthoughtはこれをサポートするsetuptoolsのカスタムバージョンを持っていますが、それ以外の場合は6月以降議論されているwishlistアイテムとしてバグトラッカーにあります。

しかし、システムを欺く方法があり、それらを考慮する可能性があります。 1つの方法は、パッケージを使用するときに常に最初にインポートされる最も重要なモジュールを持つことです。最初に呼び出されたときにインストール後のアクションを実行します。それから、あなた自身が後から取り除かなければならず、管理者がパッケージをインストールし、最初のユーザーが管理者以外の人物なので、ライブラリに書き込めない場合を考慮する必要があります。

最悪の場合、パッケージを使用するユーザーのために〜/ .mypackageディレクトリを作成し、新しいユーザーごとに一度postinstallを再実行する必要があります。モジュールがインポートされるたびに、〜/ .mypackageの存在をチェックします。存在しない場合は、postinstallを実行して作成します。存在する場合は、ポストインストールをスキップします。

+0

私が望んでいた答えではありませんが、私はそれを答えとして授与しています。ありがとう! –

5

Paverは、setuptoolsを次のレベルに引き上げ、カスタムタスクを書くことができます。典型的なsetup.pyファイルを拡張し、Paver環境をブートストラップする簡単な方法を提供します。

+0

私はBuildoutのような余分なものを使うことができますか、これを行うにはPaverと思われますが、これは私が求めているものではありません。 PyPI上のパッケージで、人々が "easy_install package_name"でインストールできるようにしたいと考えているとします。 –

+3

Paverは、easy_installと 'python setup.py install'が通常どおり動作するように使用できます。実際には、セットアップが正しく行われていれば、Paverをインストールする必要はありません。参照してください:http://packages.python.org/Paver/getting_started.html#but-people-are-used-to-setup-py –

関連する問題