Python: несколько пакетов с несколькими файлами setup.py - PullRequest
3 голосов
/ 25 августа 2011

Мне трудно создавать мои файлы Python setup.py, чтобы делать то, что я хочу.У меня есть один пакет pacakge, настроенный так:

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.

Моя проблема в том, что удаление второго пакета (с помощью pip) также уничтожает первый - это не то, чтоЯ хочу, чтобы это случилось.Я хотел бы просто удалить myutils.b и сохранить myutils.a там, где он есть.

Я подозреваю, что путаю с наличием нескольких файлов init .py с папками myutils /., но я не уверен, как еще заставить их работать должным образом.

-

Также нашел эту полезную страницу:

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

1 Ответ

3 голосов
/ 25 августа 2011

Если я правильно понимаю, вы пытаетесь настроить пакет пространства имен (пустой пакет, содержащий другие, отдельно установленные пакеты), который является функцией setuptools .

Вызовите setuptools.setup() со списком пакетов, которые являются пространствами имен для аргумента namespace_packages.

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

Затем создайте myutils/__init__.py, содержащий только следующее:

__import__('pkg_resources').declare_namespace(__name__)

Наконец, в myutils/a/__init__.py и myutils/b/__init__.py вызовите pkg_resources.declare_namespace('myutils'), который гарантирует, что пространство имен будет создано, если сначала будет установлен пакет более низкого уровня.

Я почти уверен, что это работает.Я все еще изучаю setuptools, поэтому, если я ошибаюсь, исправления приветствуются.

...