Вставьте пакеты Python из отдельного каталога в другое пространство имен

Предположим, в моем пути Python у меня было пространство имен foo, У меня есть модули в отдельном каталоге (не в пути Python) под названием bar: x.py, y.py, z.py, Таким образом, макет может выглядеть примерно так:

|--/python/path/site-packages/foo/ 
|----__init.py__
|--...
|--/some/other/directory/bar/
|----__init__.py
|----x.py
|----y.py
|----z.py

Итак, учитывая, что foo уже на моем пути, я могу легко сделать import foo, Однако могу ли я добавить к этому какую-то черную магию? foo/__init__.py так что в моей оболочке Python я могу начать делать что-то вроде from foo import x или же from foo.x import my_function? Идеально ищет решение, которое работает как на Python 2.7, так и на Python 3.6, но не является строгим.

РЕДАКТИРОВАТЬ: Я хотел бы добавить, что bar/ может также иметь подпапки или подпакеты в идеальном сценарии.

0 ответов

Забыл, что я задавал этот вопрос здесь, но, в случае, если кто-то еще окажется здесь, это то, что я в итоге делал.

# /python/path/site-packages/foo/__init__.py
__path__.append("/some/other/directory/bar/")

__path__ для конкретного пространства имен сообщает Python, на какие каталоги это пространство имен следует обратить внимание.

Другие вопросы по тегам