python - python从兄弟文件夹导入和-m标志的含义
问题描述
我知道有很多关于这个问题的文章,但我仍然无法清楚地理解它。
我的文件结构是这样的:
── pkg
├── __init__.py
├── sub_pkg_A
│ ├── __init__.py
│ ├── module_in_A.py
├── sub_pkg_B
│ ├── __init__.py
│ ├── module_in_B.py
在module_in_B.py
:
from ..sub_pkg_A import module_in_A
print('Successful!')
并执行:
$ cd pkg
$ python pkg/sub_pkg_B/module_in_B.py
Traceback (most recent call last):
File "pkg/sub_pkg_B/module_in_B.py", line 1, in <module>
from ..sub_pkg_A import module_in_A
ValueError: attempted relative import beyond top-level package
$ python -m pkg.sub_pkg_B.module_in_B
Successful!
这是我的问题:
- 为什么
python pkg/sub_pkg_B/module_in_B.py
不能工作?在这种情况下,什么是顶级包,为什么? - 运行时如何解决此错误
python pkg/sub_pkg_B/module_in_B.py
?我知道这sys.path.append('../')
可能会有所帮助,但在我的情况下不起作用。 - 为什么
python -m pkg.sub_pkg_B.module_in_B
可以工作?我知道 -m 标志是“将库模块作为脚本运行”,但我不清楚。我什么时候应该使用 -m 标志?
很抱歉有很多问题。任何建议和答案都是有帮助的。谢谢!
解决方案
推荐阅读
- python - 如何使用pandas groupby对一些行降序和一些行升序排序
- reactjs - 对象作为反应子无效(react-native)
- interrupt - STM32 SPI在使用中断时丢弃数据
- php - 在woocommerce中将任何产品添加到购物车后,如何立即删除客户端浏览器上的“PHPSESSID”cookie?
- swift - Swift 和 Cloud Firestore 事务 - getDocuments?
- java - Hibernate Envers - 请求更改对象列表
- c++ - c++ 中的汇编内联(float 和 _cdecl)
- javascript - 诗浓中的 spyOn.and.callFake 是什么?
- python-2.7 - Python MySQLdb 打印表 A 中不在表 B 中的行
- spring-boot-admin - 需要更新 Spring-boot-admin UI url