【问题标题】:Cannot import either Scrapy's settings module or its scrapy.cfg无法导入 Scrapy 的设置模块或其 scrapy.cfg
【发布时间】:2012-08-26 15:51:27
【问题描述】:

这是一篇很长的帖子,但经过广泛研究后,我找不到解决方案。我在 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 项目目录中的 scrapy 命令运行 scrapyd 服务器。从我的 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 服务器似乎工作正常,我怎样才能正确上传我的蜘蛛?

非常感谢!

【问题讨论】:

    标签: python django environment-variables scrapy


    【解决方案1】:

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

    【讨论】:

    • 我已经尝试将scrapy.cfg 文件移动到manage.py 文件所在的同一目录。它可以工作,但是我的蜘蛛都没有上传到服务器的问题仍然存在。环境变量的导出不起作用。
    【解决方案2】:

    wiki of scrapy 内有 3 个链接:

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

    希望这会有所帮助...

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

    【讨论】:

    • 感谢您将我指向 wiki。我不知道 Scrapy 的 github 页面上有一个社区 wiki。 This tutorial 给了我重要的线索:我不仅需要将 scrapy.cfg 文件移动到最顶层的 Django 项目目录,而且还需要移动整个 Scrapy 项目目录。现在我的蜘蛛可以正确上传到 Scrapyd 服务器,并且所有环境变量都可以识别。所以,既然你给我指出了正确的方向,我就奖励你赏金。最好的丹克,拉尔夫。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2011-05-20
    • 2020-08-17
    相关资源
    最近更新 更多