作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(已解决)此链接https://dev.to/codemouse92/dead-simple-python-project-structure-and-imports-38c6也很好地解释了 Python 结构和导入。
我创建了一个 Python 包 test_pkg
。
test_pkg/
├── setup.py
└── test_pkg
├── __init__.py
├── main.py
└── sub_pkg
├── __init__.py
└── sub_pkg_a.py
在main.py
中,将导入子包中的模块,但我必须明确地写:
from test_pkg.sub_pkg import sub_pkg_a
否则,如果我只写:
from sub_pkg import sub_pkg_a
Python 将报告:
>>> import test_pkg.main
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/zheng/tests/test_pkg/test_pkg/main.py", line 2, in <module>
from sub_pkg import sub_pkg_a
ModuleNotFoundError: No module named 'sub_pkg'
你能告诉我为什么需要包名:test_pkg.sub_pkg
吗?
相对导入在包中工作正常,但如果我直接执行 main.py
脚本,则会出现另一个导入错误:
~/tests/test_pkg/test_pkg$ python3 main.py
Traceback (most recent call last):
File "main.py", line 2, in <module>
from .sub_pkg import sub_pkg_a
ModuleNotFoundError: No module named '__main__.sub_pkg'; '__main__' is not a package
那么,问题是:__init__.sub_pkg
和__main__.sub_pkg
的路径不同吗?
最佳答案
这里需要使用的是相对导入。
尝试运行同样的事情
from .sub_pkg import sub_pkg_a
本例中的点指的是“相对于导入所在的文件”,在本例中是相对于 main.py
的位置
这篇文章很好地解释了它 https://realpython.com/absolute-vs-relative-python-imports/
关于Python自建包导入路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58604289/
我是一名优秀的程序员,十分优秀!