gpt4 book ai didi

python - Scrapyd 部署 "Attribute Error: NoneType object has no attribute ' 模块名称'”

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:55 26 4
gpt4 key购买 nike

我正在尝试使用 scrapy 将我的爬虫项目部署到 scrapyd 实例,但调用命令返回以下错误:

Server response (200): {"status": "error", "message": "AttributeError: 'NoneType' object has no attribute 'module_name'"}

这是我的 setup.py,用于构建在部署期间提交的 python egg:

from setuptools import setup, find_packages

setup(
name = 'mycrawler',
version = '0.1',
packages = find_packages(),
install_requires = [
'scrapy',
'PyMongo',
'simplejson',
'queue'
]
)

我的 scrapy.cfg:

[settings]
default = mycrawler.settings

[deploy:scrapyd_home_vm]
url = http://192.168.1.2:6800/
project = mycrawler

[deploy:scrapyd_local_vm]
url = http://192.168.38.131:6800/
project = mycrawler

我觉得这与鸡蛋的构建方式有关,但我不确定。我知道当您访问应该是对象的属性但由于某种原因实际上是 null 时,python 会抛出这样的错误。我也没有任何带有“module_name”属性的东西,也没有任何试图在我自己的代码中引用它的东西。在本地从 scrapy 运行爬虫工作得很好,但部署 egg 却不行。

最佳答案

一个相当晚的答案,但我遇到了同样的问题并找到了解决方案。

我的问题可以通过查看 scrapyd 本身发出的回溯找到:

Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/vagrant/venv/lib/python2.7/site-packages/scrapyd/runner.py", line 39, in <module>
main()
File "/home/vagrant/venv/lib/python2.7/site-packages/scrapyd/runner.py", line 34, in main
with project_environment(project):
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/home/vagrant/venv/lib/python2.7/site-packages/scrapyd/runner.py", line 22, in project_environment
activate_egg(eggpath)
File "/home/vagrant/venv/local/lib/python2.7/site-packages/scrapyd/eggutils.py", line 13, in activate_egg
settings_module = d.get_entry_info('scrapy', 'settings').module_name

AttributeError: 'NoneType' object has no attribute 'module_name'

如您所见,它正在尝试加载 scrapy 项目的 settings_module; module_name 属性不存在,因为 d.get_entry_info 正在返回 None 对象。

解决方案是检查用于生成 egg 的 setup.py 并检查对 setup 的调用是否包含以下行:

packages=find_packages(),
entry_points={'scrapy': ['settings = scraper.settings']},

这里,scraper.settings 是 scrapy 项目设置文件的 Python 模块路径。将其更改为反射(reflect)您的项目布局的一个,您应该是花花公子..

..如果没有,这里的关键是检查 scrapyd 的输出(启用调试允许您在服务器响应中看到它)以找到解决方案。

关于python - Scrapyd 部署 "Attribute Error: NoneType object has no attribute ' 模块名称'”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14634733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com