2

現在、単一の python ファイル peewee.py で構成される「peewee」というプロジェクトがあります。単体テストを含むモジュール「tests.py」もあります。これは素晴らしいことです。ライブラリを使用したい人は、単一のファイルを取得して実行するだけです。

最近、いくつかのエクストラを追加したいと思っていましたが、名前空間を正しくするためにこれを行う方法がわかりません。私のプロジェクトのルートを見ると、次のようになります。

peewee.py
tests.py

以下を追加したい:

extras/__init__.py
extras/foo.py
extras/bar.py

そして、これはトリッキーな部分です。単一のファイルを使用している人でもこれを実行できるようにしたいのですが、エクストラが必要な場合は、それらも使用できます。次のように、エクストラに名前空間を付けたいと思います。

from peewee.extras import foo
from peewee.extras.bar import Baz

私の setup.py は次のようになります。

setup(
    name='peewee',
    packages=['extras'],
    py_modules=['peewee'],
    # ... etc ...
)

しかし、これはうまくいきません。どんな助けでも大歓迎です!

4

1 に答える 1

2

パッケージの設定

@ThomasK が言ったように、これを行う最も簡単な方法はパッケージを使用することです。パッケージに という名前を付けた場合peewee、最上位__init__.pyファイルを編集して、ユーザーが以前と同じ方法でパッケージを引き続き使用できるようにすることができます。

まず、パッケージとサブフォルダーのディレクトリ構造:

peewee/
    __init__.py
    peewee.py
    extras/
        __init__.py
        foo.py
        bar.py

__init__.pyファイル_

次に、トップレベルに数行追加する必要があります__init__.py

簡単な方法を使用して、次のものを含めることができます。

from peewee.peewee import *

これにより、すべてがpeewee.pyパッケージの最上位の名前空間に配置されます。または、より伝統的な代替手段を使用して、最上位にある必要があるメソッドのみを明示的にインポートすることもできます。

from peewee.peewee import funtion1, class1,...

また、下位互換性のために__all__、モジュールの属性を明示的に設定して peewee のみを含めることができます

__all__ = ['peewee']

from peewee import *これにより、本当に必要な場合に引き続き使用できるようになります。

setup.pyファイルの書き込み

最後に、いくつかのインストール スクリプトなども設定する必要があります。Zed Shaw のLearn Python The Hard Way 演習 46には、使用すべき単純で明確なプロジェクト スケルトンがあります。

最も重要な部分はsetup.pyファイルです。例のページはそれほど長くなく、Zed は本当に素晴らしい本を作るために多大な労力を費やしたので、ここに再投稿するつもりはありません (ただし、本全体は無料で入手できます)。distutils の setup.py ファイルを作成するためのより長い手順/ドキュメントを読むこともできますが、LPTHW は、必要なすべてをすばやく簡単に実行できるものを提供します。

パッケージ全体のディレクトリ構造

最終的なディレクトリ構造は実際には少し大きくなることに注意してください (名前はpeewee-pkg重要ではなく、binオプションです。サブフォルダーの名前は重要です)。

peewee-pkg/
    setup.py
    bin
    peewee/
        __init__.py
        peewee.py
        extras/
            __init__.py
            foo.py
            bar.py

インストールと使用

その後、必要に応じて実際にパッケージを PyPi に投稿したり、ユーザーに直接配布したりできます。実行する必要があるのは、次のとおりです。

 python setup.py install

そして、すべてが利用可能になります。

インストール後のインポート

最後に、前述のようにファイルで特定のインポートを行う場合peewee/__init__.py、ユーザーは引き続き次のことを実行できます。

from peewee import function1, class1, ...

しかし今ではimport peewee.extras、エクストラ関数 (またはimport peewee.extras.foo as fooまたはfrom pewee.extras.foo import extra_awesome) などにアクセスするために使用することもできます。また、質問で尋ねたように、次のこともできるようになります。

from pewee.extras import foo

そしてfoo、ファイルが現在のディレクトリにあるかのように の関数にアクセスします。

パッケージ開発時の注意事項

コンピューターで、次を実行する必要があります。

python setup.py develop

を使用するのと同じように、パッケージをパスにインストールしますpython setup.py install。ただし、developモジュールを使用するたびにファイルを再チェックするように python に指示します。これにより、変更を加えるたびに、テストのためにシステムですぐに利用できるようになります。

于 2012-06-09T05:31:09.420 に答える