python - 如何修复 Pylint 的误报无法导入错误?
问题描述
在过去的几个小时里,我试图弄清楚从父目录和子目录导入模块的 Pythonic 方式是什么。我做了一个项目只是为了测试目的并将它托管在github 上,所以你可以看看它以更好地理解我的问题。在项目中,我们有以下文件结构:
├── __init__.py
├── main.py
└── project
├── a.py
├── __init__.py
└── subdirectory
├── b.py
└── __init__.py
我试图弄清楚如何从子目录和父目录导入模块。
如果我尝试在导入语句中不指定根目录名称的情况下将模块导入模块,那么pylint./project/subdirectories/b.py
开始抱怨它无法找到模块,但程序运行正常:
如果我在导入中指定了根目录声明然后pylint停止抱怨,但程序不再运行:有人可以向我解释为什么当程序运行时我会从pylint
得到那些误报,如果我做了pylint./project/a.py
main.py
高兴,通过在import语句中指定根目录,那么程序就停止工作了?
解决方案
您的 IDE(以及因此 pylint)希望代码从 git 存储库的根目录启动,而不是从它上面的目录启动。您的 git 项目结构中没有test
目录。所以我认为导入from test.project import a
工作只是因为你的 git 存储库本身被命名test
并且因为你从项目目录上方启动程序。即你的真实结构是这样的:
test
├── .git # root of git repository inside test
├── __init__.py
├── main.py
└── project
├── a.py
├── __init__.py
└── subdirectory
├── b.py
└── __init__.py
但是测试目录不在 git 中,对于 IDE,git 根目录作为源根目录。如果您__main__
从启动 pylint 的同一目录开始启动,则 pylint 指示将是准确的。所以解决方法是在你的 git 项目中创建测试目录:
.git # root of git repository outside test/
test
├── __init__.py
├── main.py
└── project
├── a.py
├── __init__.py
└── subdirectory
├── b.py
└── __init__.py
您还可以通过更改 IDE 的根目录从启动代码的同一目录启动 pylint。
推荐阅读
- angular - 我想从列表 angular 6 中搜索数据
- asp.net-core - 30 分钟后,asp.net 核心身份中缺少其他声明
- laravel - 如果使用 VUE JS 在 s3 中不存在图像,如何设置默认图像
- vue.js - 在vue中加载dom时如何获取dom的高度?
- python - 关于opencv-python 3.4.3
- r - Biostrings::getPromoterSeq 返回查询基因 ID 的多个序列
- reactjs - React TS - 向上传递组件树
- c# - 将 C# Translate Text API 代码从异步转换为 SQL Server CLR 函数的同步
- tuples - 如何在水晶语言的宏中使用构造函数创建一个元组
- assembly - MIPS ASSEMBLY,打印值,突然中断