Python Scrapy ImportError:使用subprocess.Popen时,没有名为project.settings的模块

Python Scrapy ImportError:使用subprocess.Popen时,没有名为project.settings的模块,python,scrapy,popen,Python,Scrapy,Popen,我有一个脏兮兮的爬虫在网站上搜索。在某些情况下,scrapy由于RAM问题而自杀。我重写了spider,这样它就可以被拆分并为一个站点运行 在初次运行之后,我使用subprocess.Popen再次提交带有新开始项的scrapy crawler 但我犯了一个错误 ImportError:没有名为shop.settingsTraceback的模块(最近一次调用): 文件“/home/kumar/envs/ishop/bin/scrapy”,第4行,在execute()中 文件“/home/kuma

我有一个脏兮兮的爬虫在网站上搜索。在某些情况下,scrapy由于RAM问题而自杀。我重写了spider,这样它就可以被拆分并为一个站点运行

在初次运行之后,我使用subprocess.Popen再次提交带有新开始项的scrapy crawler

但我犯了一个错误

ImportError:没有名为shop.settingsTraceback的模块(最近一次调用):
文件“/home/kumar/envs/ishop/bin/scrapy”,第4行,在execute()中
文件“/home/kumar/envs/ishop/lib/python2.7/site packages/scrapy/cmdline.py”,第109行,在execute settings=get_project_settings()中
文件“/home/kumar/envs/ishop/lib/python2.7/site packages/scrapy/utils/project.py”,第60行,在get\u project\u settings.setmodule(settings\u module\u path,priority='project')中
文件“/home/kumar/envs/ishop/lib/python2.7/site packages/scrapy/settings/_init__.py”,第109行,在setmodule模块=导入模块(模块)中
文件“/usr/lib64/python2.7/importlib/_init__.py”,第37行,在导入模块_导入_(名称)导入错误:没有名为shop.settings的模块

子流程cmd是

newp=Popen(comm,stderr=filename,stdout=filename,cwd=fp,shell=True)

  • 通讯-
    source/home/kumar/envs/ishop/bin/activate&&cd/home/kumar/projects/usg/shop/spider/。/…&&/home/kumar/envs/ishop/bin/scrapy crawl-a category=laptop-a site=newsite-a start=2-a numpages=10-a split=1'allsitespider'

  • cwd-/home/kumar/projects/usg

我检查了sys.path,它是正确的
[home/kumar/envs/ishop/bin'、/home/kumar/envs/ishop/lib64/python27.zip'、/home/kumar/envs/ishop/lib64/python2.7'、/home/kumar/envs/ishop/lib64/python2.7/plat-linux2'、/home/kumar/envs/ishop/lib64/python2.7/lib-tk'、/home/kumar/envs/ishop/lib64/python2.7/lib-old'、/home/kumar/envs/python2.7/python2.7/python2.7/python2.7、',“/usr/lib/python2.7',”/home/kumar/envs/ishop/lib/python2.7/site packages']

但是看起来import语句使用的是
“/usr/lib64/python2.7/importlib/\uuu init\uuuu.py”
,而不是我的虚拟环境


我错在哪里?请帮助?

我建议让python专注于scrape任务,并使用其他东西进行进程控制。如果是我,我会编写一个小的bash脚本来运行您的程序

通过使用
env-iyourscript.sh
运行启动程序脚本来测试它是否工作,因为这样可以确保它在运行时没有任何继承的环境设置

一旦bash脚本正常工作,包括设置virtualenv等,您就可以让python运行该bash脚本,而不是python。此时您已经避开了任何奇怪的环境问题,并获得了一个非常可靠的启动脚本


更好的是,如果您当时有bash脚本,请使用“适当的”进程控制器(daemontools、supervisor…)启动进程,在崩溃时重新启动,等等。

看起来设置没有正确加载。一种解决方案是在启动爬虫程序之前构建一个egg并将其部署到环境中


官方文档,

您需要在错误确认env已被实际设置之前设置
env
@padraiccnningham我正在Popen命令中,**source/home/kumar/envs/ishop/bin/activate**。以及sys.path(问题中)输出没什么区别吗?我也试过了,运气不好。同样的错误。我相信shell=True已经在做建议的事情了。不管怎样,我试过创建shell脚本并在spider中执行shell,结果是一样的。谢谢,这似乎是相关的,让我试试,让你知道谢谢文档链接,我浏览了文档并决定了ed使用scrapyd代替我自己的shell脚本。这解决了问题。虽然这不是问题的直接答案,但该建议导致了替代解决方案,因此将其标记为已回答。