Установка пакета как субмодуля - PullRequest
0 голосов
/ 25 декабря 2010

У меня есть пакет сторонних разработчиков с открытым исходным кодом "foo"; это находится в стадии бета-тестирования, и я хочу настроить его в соответствии с моими требованиями. Поэтому я не хочу устанавливать его в / usr / local / lib / python или где-либо в текущем sys.path, поскольку я не могу часто вносить изменения в пакеты верхнего уровня.

foo/
   __init__.py
   fmod1.py
       import foo.mod2
   fmod2.py
       pass

Я хочу установить пакет "foo" как подпакет моего пространства имен скажем "team.my_pkg". Таким образом, «полное имя» пакета становится «team.my_pkg.foo» без изменения кода во внутренних модулях, которые называют «team.my_pkg.foo» как «foo».

team/
    __init__.py
    my_pkg/
        __init__.py
        foo/
           fmod1.py
               import foo.mod2
           fmod2.py
               pass

Один из способов сделать это - сделать это в team.my_pkg. init .py:

import os.path
import sys
sys.path.append(os.path.dirname(__file__))

Но я думаю, что это очень небезопасно. Я надеюсь, что есть способ, которым только fmod1.py и fmod2.py могут вызывать «foo» по его короткому имени, все остальное должно использовать его полное имя «team.my_pkg.foo»

Я имею в виду, что это должно произойти за пределами команды / my_pkg / foo:

import team.my_pkg
import foo

Но это должно получиться за пределами команды / my_pkg / foo:

import team.my_pkg.foo

Ответы [ 2 ]

2 голосов
/ 25 декабря 2010
So I don't want to get it installed in /usr/local/lib/python or anywhere in current sys.path as I can't make frequent changes in top level packages.

Что не так с:

python setup.py develop
0 голосов
/ 25 декабря 2010

Используйте явный относительный импорт , чтобы позволить перемещаемым подпакетам ссылаться на себя.например, в fmod1.py:

from . import mod2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...