首页 > 解决方案 > Python 3 导入与内部“解析器”冲突

问题描述

.
├── gen.py
├── lexer
│   ├── engine.py
|   └── ...
└── parser
    ├── engine.py
    └── ...

我正在编写我的编译器项目,但现在我遇到了 python 导入冲突。在 gen.py 中,我想导入一些代码生成函数,比如

import lexer.engine   # OK
import parser.engine  # ModuleNotFoundError: No module named 'parser.engine'; 'parser' is not a package

经过一番调查,我了解到“解析器”是为 python 内部解析器保留的。但我无法更改目录名称“解析器”,因为它已在任何地方使用。

我该如何解决这个问题?

标签: pythonparsingimportname-collision

解决方案


要被接受为 Python 包,目录必须有一个__init__.py文件。
可以像包是常规模块一样访问此文件中声明的变量。它也可以是空的。

tl; dr:将一个空__init__.py文件添加到目录中,它应该可以工作。


推荐阅读