Python 导入更高级别的模块

Python 导入更高级别的模块,python,python-3.x,import,module,Python,Python 3.x,Import,Module,我使用setuptools获得了以下目录结构: root/ A/ __init__.py 1.py 2.py B/ __init__.py 3.py __init__.py 包部分如下所示: packages=['root', 'root.A', 'root.B', ], $ python3 -c "from root import one; one.first_func()" first_func belo

我使用setuptools获得了以下目录结构:

root/
    A/
      __init__.py
      1.py
      2.py
    B/
      __init__.py
      3.py
    __init__.py
包部分如下所示:

packages=['root', 'root.A', 'root.B', ],
$ python3 -c "from root import one; one.first_func()"
first_func belongs to: root.one in: /home/sinoroc/workspace/root/.venv/lib/python3.6/site-packages/root-0.0.0.dev0-py3.6.egg/root/A/one.py
要导入我使用的内部.py文件的内容,请执行以下操作:

from root.A import 1
from root.B.3 import a_func
现在,如果我想直接从根模块导入一个_func,我会在根目录的init文件中添加以下行

# to allow root.a_func access
from .B.3 import a_func
但是有没有一种方法可以导入整个模块而不是单个特定项(同时保留相同的目录结构)

换句话说,是否可以在导入期间隐藏中间级别模块的访问权限

我已经尝试将以下行添加到根目录中的init文件中,但它不起作用

from .A import *
from .B import *

有什么建议吗?

修改
\uuuuu路径\uuuu
变量可能会有所帮助



这允许执行以下操作:

packages=['root', 'root.A', 'root.B', ],
$ python3 -c "from root import one; one.first_func()"
first_func belongs to: root.one in: /home/sinoroc/workspace/root/.venv/lib/python3.6/site-packages/root-0.0.0.dev0-py3.6.egg/root/A/one.py
以及:

$ python3 -c "from root.A import one; one.first_func()"
first_func belongs to: root.A.one in: /home/sinoroc/workspace/root/.venv/lib/python3.6/site-packages/root-0.0.0.dev0-py3.6.egg/root/A/one.py

见:


这真是个令人困惑的问题。。。您是否尝试过在
根目录下从.A.1导入*
初始化
?这就是我要找的。非常感谢。我想知道在PEP420之后它是否被认为是“非pythonic的”…我还没有真正研究过PEP420或名称空间包。我想这取决于你的实际用例,如果你想让代码活在
root
和/或
root.A
以及
root.A.one
aka
root.one
。只要你为你的用户完整地记录你的软件包,我想说什么都可以。
$ python3 -c "from root import one; one.first_func()"
first_func belongs to: root.one in: /home/sinoroc/workspace/root/.venv/lib/python3.6/site-packages/root-0.0.0.dev0-py3.6.egg/root/A/one.py
$ python3 -c "from root.A import one; one.first_func()"
first_func belongs to: root.A.one in: /home/sinoroc/workspace/root/.venv/lib/python3.6/site-packages/root-0.0.0.dev0-py3.6.egg/root/A/one.py