Python 导入更高级别的模块
我使用setuptools获得了以下目录结构: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
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
akaroot.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