在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 %*
- 保存退出,并确保你的 C:/python 和C:/python/Scripts 都在环境变量。这样就可以正常运行scrapy-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