关于运行scrapy项目时提示 ModuleNotFoundError: No module named 'pymongo‘的解决方案

1问题描述

今天使用scrapy框架写爬虫并且使用mongodb存储结果时,在powershell中运行scrapy crawl demo发现报错,报错内容是No module named 'pymongo‘,即,没有找到pymongo模块,但是笔者确确实实的下载过这个模块,那么到底是怎么回事呢?

2问题分析

首先,需要指出的是,一定是环境问题。是否是多python版本共存?笔者的电脑里同时存在着Python2.7和python3.6,当初是安装anaconda时,默认安装了前者,后者是工作学习需要,同时Python2将被淘汰,安装了Python3,导致当前笔者的电脑里同时存有两个环境,而,笔者先前将pymongo安装在了python36中,并没有安装在Python27中,导致在powershell中运行scrapy时默认使用了python2.7,所以导致了上述报错,那么到底是不是呢?

3验证假设

验证假设最好的方法就是去尝试,这里笔者先贴出powershell中的错误:
上图可以发现
这里先尝试在默认的Python27环境中同样也下载这个pymongo模块,再运行一遍,看看是否报错,结果如下:
在这里插入图片描述发现能够正确运行了,看来是这个问题,即直接在终端运行scrapy程序会默认使用conda的Python默认路径,即我这里是Python2.7。

4其他

这里使用cmd终端方法来试试,因为powershell算是cmd升级版本,笔者经过测试(先卸载Python2.7的pymongo再安装)分别测试发现,确实是这个conda的默认环境导致的问题,但是在笔者测试的过程中,还发现了一个powershell问题,即不能够像cmd切换环境:如下分别是在cmd和powershell中的切换Python环境的调试

conda activate python版本号
我这里是36,因为当初安装conda时默认的27
conda activate Python36

在这里插入图片描述
发现成功的切换环境,但是在powershell中就不可以
在这里插入图片描述
因此,这里需要注意,但是既然在cmd中可以切换环境,那么因为我最开始的scrapy是在python36中写的,出错原因是powershell只认识默认的Python27版本,而我在Python27中没有安装pymongo,在Python36中安装了这个模块,那么我在cmd中切换成Python36后再运行scrapy文件不就可以吗?
实践出真知:
在这里插入图片描述确实可行

5总结

很多人因为工作学习需要,会在电脑中同时存在多个Python版本,
(1)在powershell运行scrapy文件程序时,会默认使用conda默认的环境,如果该默认环境中没有装有对应的第三方模块时,就会出现类似的找不到模块的错误,因此可以在默认的环境下也安装一样的模块,同时继续使用powershell启动;
(2)由于笔者在上面分析中发现,powershell无法切换环境,如果不非要使用powershell,可以在终端cmd中,切换Python解释器后,因为pymongo安装在Python36中了,切换后就可以直接运行。
总之,如果没有多版本共存问题,就不会出现本文问题;同时如果powershell可以切换版本也会节省很多debug时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值