-1

我的项目如下所示:

src
 |--annotation_correction
 |--|--suggestion.py
 |--|--error.py
 |--|--...
venv
 |--...

我安装了我的包,pip install -e .在主文件夹中使用。当我键入时pip freeze,我的包“注释”在列表中,并且 VSCode 似乎也将其识别为已安装的包。

问题是,当我suggestion.py尝试从 error.py 导入例如时运行时from annotation_correction.error import Error, ErrorType,我仍然收到错误:
ModuleNotFoundError: No module named 'annotation_correction.error'; 'annotation_correction' is not a package

所有这一切都是在使用在 venv 中运行的解释器时进行的。

setup.py刚打电话setup(),我的setup.cfg样子是这样的:

...
packages = 
    annotation_correction
...
package_dir =
    =src
4

1 回答 1

0

为了让我的评论成为答案:

如果您的包中有一个模块从同一个包中导入其他模块from package import modulefrom . import module类似,那么您将需要使用-mswitch

搜索sys.path命名模块并将其内容作为__main__模块执行。

否则,Python 将设置sys.path运行脚本的目录在其中,这自然会对导入造成严重破坏(因为包是“不可见的”)。

这代表你是否安装了一个包(实际上你不一定需要pip install -e你正在处理的同一个包)。

另一种选择是在包之外有一个独立的脚本作为入口点并执行例如from annotation_correction.suggestion import main(因为从该脚本的角度来看,包在那里并且一切都很好 - 如果安装了包,-e或者没有-e,该脚本甚至不需要在包目录旁边,因为包已经安装并且在搜索路径上),但这是不必要的。

Visual Studio Code 显然支持与“模块”运行配置相同的东西

于 2022-02-20T16:00:30.183 回答