无法导入Scrapy的设置模块或其scrapy.cfg

时间:2012-08-31 20:14:57

标签: python django environment-variables scrapy

这是一个相当冗长的帖子,但经过广泛的研究后,我找不到解决方案。我在OSX 10.8上有一个混合的Django 1.4.1 / Scrapy 0.14.4项目,我使用Django项目的manage.py命令控制Scrapy,如here所述。例如,调用

python manage.py scrapy crawl example_spider 

没有问题。现在,我正处于设置scrapyd Web服务以部署我的蜘蛛的地步。但是,当我执行

python manage.py scrapy server

然后我得到了这个例外:

scrapy.exceptions.NotConfigured: Unable to find scrapy.cfg file to infer project data dir

所以,显然Scrapy找不到scrapy.cfg文件,因为我没有在Scrapy项目中执行它。但是,其他Scrapy命令可以正常工作,因为在我的Django项目settings.py中我执行了以下操作:

sys.path.append('/absolute/path/to/my/Scrapy/project')
os.environ['SCRAPY_SETTINGS_MODULE'] = 'my_scrapy_project_name.settings'

问题1:为什么Scrapy无法在我的设置中检测到scrapy.cfg文件?我该如何解决这个问题?


由于上面提到的内容不起作用,我尝试使用Scrapy项目目录中的scrapyd命令运行scrapy服务器。从我的Scrapy项目的顶级目录执行scrapy server会产生以下结果:

$ scrapy server
UserWarning: Cannot import scrapy settings module my_scrapy_project_name.settings
warnings.warn("Cannot import scrapy settings module %s" % scrapy_module)
2012-08-31 21:58:31+0200 [-] Log opened.
2012-08-31 21:58:32+0200 [-] Scrapyd web console available at http://localhost:6800/
2012-08-31 21:58:32+0200 [Launcher] Scrapyd started: max_proc=8, runner='scrapyd.runner'
2012-08-31 21:58:32+0200 [-] Site starting on 6800
2012-08-31 21:58:32+0200 [-] Starting factory <twisted.web.server.Site instance at 0x101dd3d88> 

服务器正在运行而没有问题,但是,找不到我的Scrapy项目的settings.py文件,因为不再设置相应的环境变量。这就是我在终端中执行以下操作的原因:

export PYTHONPATH=/absolute/path/to/my/Scrapy/project
export SCRAPY_SETTINGS_MODULE=my_scrapy_project_name.settings

不幸的是,这两个命令没有任何效果。每当我执行scrapy server(或任何其他Scrapy命令)时,我都会收到Scrapy无法导入其项目设置模块的消息。

我的scrapy.cfg目前只有以下内容:

[settings]
default = my_scrapy_project_name.settings

[deploy:scrapyd]
url = http://localhost:6800/
project = my_scrapy_project_name

当我尝试将我的Scrapy项目部署到scrapyd服务器时,它似乎首先工作,但后来我意识到没有上传任何蜘蛛,可能是因为无法检测到设置文件。这是控制台输出:

$ scrapy deploy scrapyd -p my_scrapy_project_name
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-
packages/scrapy/utils/project.py:17: UserWarning: Cannot import scrapy
settings module my_scrapy_project_name.settings
 warnings.warn("Cannot import scrapy settings module %s" %
scrapy_module)
Building egg of event_crawler-1346531706
'build/lib' does not exist -- can't clean it
'build/bdist.macosx-10.6-intel' does not exist -- can't clean it
'build/scripts-2.7' does not exist -- can't clean it
zip_safe flag not set; analyzing archive contents...
Deploying event_crawler-1346531706 to http://localhost:6800/addversion.json
Server response (200):
{"status": "ok", "project": "my_scrapy_project_name", "version": "1346531706", "spiders": 0}

问题2:如何正确导出上面的路径和环境变量,以便此警告消失?

问题3:由于scrapyd服务器似乎工作正常,我怎样才能正确上传我的蜘蛛?

非常感谢提前!

2 个答案:

答案 0 :(得分:2)

wiki of scrapy内有3个链接:

the first onesecond one都在解决django和scrapy冲突设置方面的问题。

希望这会有所帮助...

甚至this question在SO上解决了很多设置 - django和scrapy之间的问题

答案 1 :(得分:2)

如果你看一下它所调用的code branch that raises this exceptiondefinition of the closest_scrapy_cfg function,scrapy唯一可以找到你的scrapy.cfg就在你运行命令的目录和任何父目录中。您可以在manage.py中运行os.chdir,或将scrapy.cfg移动到您正在运行的目录中。