Scrapy ';导入错误:没有名为<;的模块;项目名称>;。设置';烟度试验

Scrapy ';导入错误:没有名为<;的模块;项目名称>;。设置';烟度试验,scrapy,Scrapy,scrapy crawl在我的项目中运行良好 在冒烟测试中,我抓取一个私有页面,并断言这些项目与预期一致 在我完成一个严肃的项目重构之前,一切都很顺利,对于冒烟测试,最终在setUp()中设置了一个env var,它实际上设置了os.environ['SCRAPY\u SETTINGS\u MODULE']='.SETTINGS' 设置此环境变量后,scrapy crawl抱怨'ImportError:No module named.settings' scrapy.cfg设置正确,除此烟雾测试

scrapy crawl
在我的项目中运行良好

  • 在冒烟测试中,我抓取一个私有页面,并断言这些项目与预期一致

  • 在我完成一个严肃的项目重构之前,一切都很顺利,对于冒烟测试,最终在
    setUp()
    中设置了一个env var,它实际上设置了
    os.environ['SCRAPY\u SETTINGS\u MODULE']='.SETTINGS'

  • 设置此环境变量后,
    scrapy crawl
    抱怨
    'ImportError:No module named.settings'

  • scrapy.cfg
    设置正确,除此烟雾测试外,其他一切都正常

  • 这个问题只需在os.sys('SCRAPY crawl')之前通过
    os.environ.pop('SCRAPY设置\u模块')
    就可以解决,但这感觉不对


  • 所以,请有人告诉我是什么原因导致了这个问题,什么是正确的方法来解决它,谢谢

    我找到了原因:

    scrapy crawl
    scrapy执行
    scrapy.utils.project.get\u project\u settings
    之前,如果未设置
    os.environ['scrapy\u settings\u MODULE']
    则调用
    scrapy.utils.conf.init\u env
    ,其中项目主目录被添加到
    sys.path

    通过设置此环境变量,scrapy gets的副本
    sys.path
    project main dir没有路径,因此导入失败

    弹出
    os.environ['SCRAPY\u SETTINGS\u MODULE']
    将导致调用
    init\u env
    ,因此
    SCRAPY crawl
    可以正常工作。另一种解决方法是将
    os.environ['PYTHONPATH']
    设置为projectmaindir路径,scrapy稍后会在该路径中查找

    我最后采用的方法是修改scrapy,禁用对
    os.environ['scrapy\u SETTINGS\u MODULE']
    的检查,并始终执行
    init\u env
    。最糟糕的代价是,每次执行
    scrapy crawl
    时,scrapy都会查找一次项目主目录路径,这对我来说似乎不是什么大工作。并且该路径不会多次添加到
    sys.path
    ,因为它在追加之前已被选中

    就这样,如果我在什么地方弄错了,请告诉我,谢谢