热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1问题描述今天使用scrapy框架写爬虫并且使用mongodb存储结果时,在powershell中运行scrapycrawldemo发现报错,报错内容

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时间。


推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有