6

Pythonのsetup.pyファイルを作成して自分のやりたいことを実行するのに苦労しています。私はこのように1つのパッケージを設定しています:

somestuff_root/
    setup.py
    myutils/
        __init__.py
        a/
            __init__.py
            somestuff.py

私はこのような別のパッケージ設定を持っています:

otherstuff_root/
    setup.py
    myutils/
        __init__.py
        b/
            __init__.py
            otherstuff.py

だから、物事は私のsite-packages/ディレクトリに次のように整理されています。

myutils/
    a/
        somestuff.py
    b/
        otherstuff.py

両方をpipでインストールした後、まさにこれが必要です。

私の問題は、2番目のパッケージを(pipを使用して)アンインストールすると、最初のパッケージも消去されることです。これは、私が望んでいることではありません。myutils.bを削除し、myutils.aをそのままにしておくだけです。

myutils/フォルダーに複数のinit.pyファイルがあると混乱しているのではないかと思いますが、これらを正しく機能させる方法が他にわかりません。

-

この役立つページも見つかりました:

http://www.sourceweaver.com/musings/posts/python-namespace-packages

4

1 に答える 1

7

私がこれを正しく理解している場合、セットアップしようとしているのは、setuptoolsの機能である名前空間パッケージ(他の個別にインストールされたパッケージを含む空のパッケージ)です。

引数setuptools.setup()の名前空間であるパッケージのリストを使用して呼び出します。namespace_packages

setup(..., namespace_packages=['myutils'], ...)

次に、myutils/__init__.py以下のみを含むを作成します。

__import__('pkg_resources').declare_namespace(__name__)

最後に、myutils/a/__init__.pymyutils/b/__init__.py呼び出しますpkg_resources.declare_namespace('myutils')。これにより、下位レベルのパッケージが最初にインストールされた場合に名前空間が作成されます。

私はそれがどのように機能するかをかなり確信しています。私はまだsetuptoolsを学んでいるので、間違っている場合は、修正していただければ幸いです。

于 2011-08-24T21:15:27.223 に答える