2017-09-24 8 views
2

J'ai un projet écrit avec Scrapy. Cette araignée a beaucoup d'exigences dans setup.py. Voici un exemple simple . J'exécuterScrapy-deploy to Scrapyd n'installe pas les exigences pointées dans setup.py

scrapyd-deploy 

et ont la sortie suivante

Packing version 1506254163 
Deploying to project "quotesbot" in http://localhost:6800/addversion.json 
Server response (200): 
......................... [CUTTED TRACEBACK] ........... 
\"/private/var/folders/xp/c949vlsd14q8xm__dv0dx8jh0000gn/T/quotesbot-1506254163-e50lmcfx.egg/quotesbot/spiders/toscrape-css.py\", 
line 4, in <module>\n 
ModuleNotFoundError: No module named 'sqlalchemy'\n"} 

MAIS

setup.py in the same directory: 

# Automatically created by: scrapyd-deploy 

from setuptools import setup, find_packages 

setup(
    name   = 'quotesbot', 
    version  = '1.0', 
    packages  = find_packages(), 
    entry_points = {'scrapy': ['settings = quotesbot.settings']}, 
    install_requires=[ 
     'scrapy-splash', 
     [ SOME REQUIREMENTS] 
     'sqlalchemy' 
    ], 
) 
+0

Ceci est un déploiement frais ou un redéploiement de l'araignée? –

+0

c'est un déploiement initial de l'araignée. Première fois. – lovesuper

Répondre

3

J'ai vérifié scrapyd code source et il ne fonctionne pas setup.py de votre projet. Il déballe juste l'oeuf qui contient l'information de dépendance mais pas la dépendance elle-même. Voici le code pour addversion api

class AddVersion(WsResource): 

    def render_POST(self, txrequest): 
     project = txrequest.args[b'project'][0].decode('utf-8') 
     version = txrequest.args[b'version'][0].decode('utf-8') 
     eggf = BytesIO(txrequest.args[b'egg'][0]) 
     self.root.eggstorage.put(eggf, project, version) 
     spiders = get_spider_list(project, version=version) 
     self.root.update_projects() 
     UtilsCache.invalid_cache(project) 
     return {"node_name": self.root.nodename, "status": "ok", "project": project, "version": version, \ 
      "spiders": len(spiders)} 

Après self.root.eggstorage.put(eggf, project, version) qui fondamentalement juste extraire l'œuf, il fonctionne directement spiders = get_spider_list(project, version=version) et donc il n'y a pas d'installation fait en tant que telle.

Donc soit votre œuf doit inclure toutes les dépendances, ce qui signifie que vous ne construisez pas l'œuf en utilisant scrapyd-deploy. Je n'ai pas trouvé beaucoup de documentation pour voir si c'est possible ou pas.

Donc, ce que vous voyez est dû au fait que srapyd manque de l'implémentation. Vous devriez ouvrir une demande de bug ou d'amélioration au http://github.com/scrapy/scrapyd/