在windows环境中,当我们需要部署scrapy项目到服务器时,常用到scrapyd,作为部署管理工具,在服务器端安装scrapyd并运行后,就可以正常使用。但是,当我们需要将windows本地的scrapy项目部署到服务器上时,需要安装scrapyd-client,用于打包项目,并发送给远程的scrapyd。
第一个问题
pip install scrapyd-client 后。在cmd中运行部署命令,scrapyd-deploy 却提示:
‘scrapyd-deploy’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
在python目录的Scripts目录下,能找到一个scrapy-deploy的文件,但是无法运行。下面来讲解决办法:
进到C:/python36/Scripts 目录下,创建两个新文件:
scrapy.bat 文件
scrapyd-deploy.bat 文件
编辑两个文件:
scrapy.bat文件中输入以下内容 :
@echo off C:\Python36\python.exe C:\Python36\Scripts\scrapy %*
scrapyd-deploy.bat 文件中输入以下内容:
@echo off C:\Python36\python.exe C:\Python36\Scripts\scrapyd-deploy %*
第二个问题:
执行scrapyd-deploy -h 提示报错
C:\Users\Administrator>scrapyd-deploy Traceback (most recent call last): File "C:\Python36\Scripts\scrapyd-deploy", line 23, in <module> from scrapy.utils.http import basic_auth_header ModuleNotFoundError: No module named 'scrapy.utils.http'
由于底层scrapyd-deploy的模块scrapy.utils.http
已经弃用,建议更新为w3lib.http
替代
打开文件"C:\Python36\Scripts\scrapyd-deploy",注释第23行,修改如下:
from scrapy.utils.project import inside_project #from scrapy.utils.http import basic_auth_header from w3lib.http import basic_auth_header from scrapy.utils.python import retry_on_eintr from scrapy.utils.conf import get_config, closest_scrapy_cfg
重新执行已解决。
C:\Users\Administrator>scrapyd-deploy -h
Usage: scrapyd-deploy [options] [ [target] | -l | -L <target> ] Deploy Scrapy project to Scrapyd server Options: -h, --help show this help message and exit -p PROJECT, --project=PROJECT the project name in the target -v VERSION, --version=VERSION the version to deploy. Defaults to current timestamp -l, --list-targets list available targets -a, --deploy-all-targets deploy all targets -d, --debug debug mode (do not remove build dir) -L TARGET, --list-projects=TARGET list available projects on TARGET --egg=FILE use the given egg, instead of building it --build-egg=FILE only build the egg, don't deploy it