Python项目导入运行正常但Pylint报错,正确导入方式是什么?
Python项目导入路径矛盾问题解决
问题根源
该矛盾本质是Python脚本运行时的导入搜索路径和Pylint默认的导入搜索路径不一致导致的:
- 直接执行
python cli.py时,Python会自动将cli.py所在的appname/目录加入sys.path,所以直接导入同目录下的compute_signature、utils模块可以正常运行- 执行Pylint时,默认将执行命令的工作目录(通常是
appname/的上层目录)加入导入搜索路径,只能识别到以appname为顶层包的导入路径,因此直接导入同目录文件会报导入错误
可行的解决方案
方案1(最推荐,符合Python包规范)
- 将
cli.py中的导入改为同目录相对导入:
from .compute_signature import 你需要导入的内容 from .utils import 你需要导入的内容- 不再直接用
python cli.py运行脚本,切换到appname/的上层目录,用模块模式执行:
python -m appname.cli该方案完全符合Python包的导入规则,后续打包、单元测试都不需要额外适配,Pylint检测也不会报错。
- 将
方案2(保留原有直接运行的写法,适配Pylint)
如果你不想修改运行方式,保留
cli.py中原有的from compute_signature import xxx写法,只需要给Pylint指定导入搜索路径即可:- 临时生效:执行Pylint时加参数指定路径
pylint --init-hook="import sys; sys.path.insert(0, './appname')" appname/cli.py- 永久生效:在项目根目录新建
pylintrc配置文件,添加以下配置:
[MASTER] init-hook='import sys; sys.path.insert(0, "./appname")'方案3(保留带包名的导入写法,适配直接运行)
如果你想保留
from appname.compute_signature import xxx的导入写法,只需要在cli.py的最开头添加路径适配代码:import sys from pathlib import Path # 自动将appname的上层目录加入运行时搜索路径 sys.path.insert(0, str(Path(__file__).parent.parent.resolve()))之后直接运行
python cli.py和Pylint检测都可以正常执行。
内容的提问来源于stack exchange,提问作者mannerpots
相关产品推荐
相关产品推荐

