Вставьте пакеты 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, на какие каталоги это пространство имен следует обратить внимание.