已解决scrapyd报错builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed.

成功解决在已经安装pywin32的情况下启动爬虫还是报错: builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed.

一、错误现象

   使用scrapyd命令启动远程爬虫程序:

  curl http://localhost:6800/scheduler.json-d project=myproject -d spider=myspider

   执行后,显示执行成功,但是爬虫程序没有运行起来,打开scrapyd的启动窗口中,显示如下错误:



2023:06:58:22 +0000] "POST /schedule.json HTTP/1.1" 200 94 "-" "curl/7.83.1"
2023-04-06T14:58:26+0800 [twisted.internet.defer#critical] Unhandled error in De
ferred:
2023-04-06T14:58:26+0800 [twisted.internet.defer#critical]
        Traceback (most recent call last):
          File "c:\users\administrator\appdata\local\programs\python\python38\li
b\site-packages\scrapyd\poller.py", line 25, in poll
            returnValue(self.dq.put(self._message(msg, p)))
          File "c:\users\administrator\appdata\local\programs\python\python38\li
b\site-packages\twisted\internet\defer.py", line 2215, in put
            self.waiting.pop(0).callback(obj)
          File "c:\users\administrator\appdata\local\programs\python\python38\li
b\site-packages\twisted\internet\defer.py", line 696, in callback
            self._startRunCallbacks(result)
          File "c:\users\administrator\appdata\local\programs\python\python38\li
b\site-packages\twisted\internet\defer.py", line 798, in _startRunCallbacks
            self._runCallbacks()
        ---  ---
          File "c:\users\administrator\appdata\local\programs\python\python38\li
b\site-packages\twisted\internet\defer.py", line 892, in _runCallbacks
            current.result = callback(  # type: ignore[misc]
          File "c:\users\administrator\appdata\local\programs\python\python38\li
b\site-packages\scrapyd\launcher.py", line 49, in _spawn_process
            reactor.spawnProcess(pp, sys.executable, args=args, env=env)
          File "c:\users\administrator\appdata\local\programs\python\python38\li
b\site-packages\twisted\internet\posixbase.py", line 223, in spawnProcess
            raise NotImplementedError(
        builtins.NotImplementedError: spawnProcess not available since pywin32 i
s not installed.



二、解决过程

     1、根据提示,显示pywin32没有安装,于是cmd中输入:

pip install pywin32

  2、然后关闭scrapyd,重启启动

  3、输入命令并执行:

curl http://localhost:6800/scheduler.json-d project=myproject -d spider=myspider

 爬虫程序还是没有启动,scrapyd窗口中依然显示builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed.

  4、于是,再去看下错误提示怎么说的

已解决scrapyd报错builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed._第1张图片

 1)错误提示在twisted包下面的一个类中的第223行抛出的这个异常,于是找到并打开这个文件。

已解决scrapyd报错builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed._第2张图片

 2)定位到223行,这里是else然后抛出了这个异常,那么我们看下怎么不让它执行到else。看下前面if判断的是win32process这个变量:已解决scrapyd报错builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed._第3张图片

 3)找到win32process的定义。ctrl+F查找

        已解决scrapyd报错builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed._第4张图片

   找到第 65行,import导入了win32process,如果导入失败则win32process的值为None。哦,那是不是因为我的电脑上没有win32process这个包,所以就导入失败了,进而导致win32process变量的值为None了,最终导致抛出了那个异常。

  4)那么,我们第一反应就是检查下没有win32process这个包:

pip show win32process

  果然没有这个包。

5)既然没有,那就安装win32process :

pip install win32process

已解决scrapyd报错builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed._第5张图片

   接着又出现了一个错误,没有找到对应的版本。

    根据错误提示,升级下pip:

 python.exe -m pip install --upgrade pip

     然后继续执行pip install win32process 还是报错找不到这个包。

     咦,怎么回事呢?为什么没有win32process包?回到初始的问题(当遇到问题进行不下去的时候,回到初始,这是解决问题的一个经验),一开始是提示pywin32找不到,而经过我的分析应该是win32process这个包找不到,那为什么错误不直接提示win32process找不到呢,这两个包有什么关系呢?一查,哦,原来win32process是在pywin32中的一个模块。所以我明白了,win32process在源代码中没有引入成功,说明pywin32没有安装或安装的不对呗。而我们已经安装过pywin32,所以确定最终的原因就是pywin32安装不正确。

6)卸载pywin32:

pip uninstall pywin32

7)换一个pip源安装:

pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple

 已解决scrapyd报错builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed._第6张图片 

 8)启动爬虫        

  curl http://localhost:6800/scheduler.json-d project=myproject -d spider=myspider

    可以打开scrapyd窗口没有看到报错信息,显示正在爬取数据,而且job中有爬虫任务在执行,说明这次终于启动成功啦!!!

9)更换pip安装源之后,我们发现新安装的pywin32版本(版本305)和使用默认的安装源安装的pywin32版本(版本306)不一样,那有没有可能之前安装的不行是因为pywin32版本不行的问题呢,为了测试,我又卸载掉pywin32重新以指定版本号的形式安装:

pip install pywin32==305

   然后再测试爬虫的启动,哦哦,可以!最终确定是pywin32版本的问题。


三、最终解决方案

         1、 卸载pywin32

pip uninstall pywin32

         2、更换其他版本重新安装(原版本306,现在安装305)

pip install pywin32==305

        已解决scrapyd报错builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed._第7张图片

       3、运行爬虫程序:

  curl http://localhost:6800/scheduler.json-d project=myproject -d spider=myspider

     4、成功运行

你可能感兴趣的:(程序开发常见问题汇总,python,scrapyd,pywin32,NotImplemented,spawnProcess)