Scrapy 命令未被识别

2 投票
2 回答
5116 浏览
提问于 2025-04-18 11:47

我已经成功在Windows Vista 64位平台上安装了Scrapy及其所有依赖项,并且是作为Site Package安装的。我在Python Shell中输入了以下内容:

Import Scrapy

并且没有出现错误。我刚开始学习如何使用Scrapy的教程。大多数教程建议使用以下命令行来设置一个新项目:

C:\Python27>scrapy startproject myproject

但是这条命令却出现了标题中提到的错误信息,提示Scrapy是一个无效的命令。我尝试修改我的环境变量,以便可以在命令提示符的任何文件位置使用这个命令。我在环境变量的末尾添加了以下内容:

C:\Python27;C:\Python27\Scripts;C:\Python27\Lib\site-packages\scrapy;C:\Python27\Scrapy

然而,这似乎并没有解决问题,因为我仍然收到相同的错误信息。我还尝试在以下位置使用命令提示符运行'scrapy startproject myproject'命令:

C:\Python27
C:\Python27\Scripts
C:\Python27\Scrapy

结果还是出现了同样的错误信息。我觉得我离解决方案很近,但就是无法让它正常工作。

有没有人能帮我找出我哪里出错了?

谢谢

编辑:

针对上面MattDMo的最后一条评论,现在这个命令可以正常工作了,但又出现了以下错误信息,我甚至不知道从哪里开始解决:

C:\Python27\Scripts>scrapy startprogram mrscript
Traceback (most recent call last):
  File "c:\Python27\Scripts\scrapy", line 3, in <module>
    from scrapy.cmdline import execute
  File "c:\Python27\lib\site-packages\scrapy\cmdline.py", line 9, in <module>
    from scrapy.crawler import CrawlerProcess
  File "c:\Python27\lib\site-packages\scrapy\crawler.py", line 3, in <module>
    from twisted.internet import reactor, defer
  File "c:\Python27\lib\site-packages\twisted\internet\reactor.py", line 38, in
<module>
    from twisted.internet import default
  File "c:\Python27\lib\site-packages\twisted\internet\default.py", line 56, in
<module>
    install = _getInstallFunction(platform)
  File "c:\Python27\lib\site-packages\twisted\internet\default.py", line 50, in
_getInstallFunction
    from twisted.internet.selectreactor import install
  File "c:\Python27\lib\site-packages\twisted\internet\selectreactor.py", line 1
8, in <module>
    from twisted.internet import posixbase
  File "c:\Python27\lib\site-packages\twisted\internet\posixbase.py", line 24, i
n <module>
    from twisted.internet import error, udp, tcp
  File "c:\Python27\lib\site-packages\twisted\internet\tcp.py", line 29, in <mod
ule>
    from twisted.internet._newtls import (
  File "c:\Python27\lib\site-packages\twisted\internet\_newtls.py", line 21, in
<module>
    from twisted.protocols.tls import TLSMemoryBIOFactory, TLSMemoryBIOProtocol
  File "c:\Python27\lib\site-packages\twisted\protocols\tls.py", line 41, in <mo
dule>
    from OpenSSL.SSL import Error, ZeroReturnError, WantReadError
  File "c:\Python27\lib\site-packages\OpenSSL\__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "c:\Python27\lib\site-packages\OpenSSL\rand.py", line 11, in <module>
    from OpenSSL._util import (
  File "c:\Python27\lib\site-packages\OpenSSL\_util.py", line 4, in <module>
    binding = Binding()
  File "c:\Python27\lib\site-packages\cryptography\hazmat\bindings\openssl\bindi
ng.py", line 87, in __init__
    self._ensure_ffi_initialized()
  File "c:\Python27\lib\site-packages\cryptography\hazmat\bindings\openssl\bindi
ng.py", line 106, in _ensure_ffi_initialized
    libraries=libraries,
  File "c:\Python27\lib\site-packages\cryptography\hazmat\bindings\utils.py", li
ne 80, in build_ffi
    extra_link_args=extra_link_args,
  File "c:\Python27\lib\site-packages\cffi\api.py", line 341, in verify
    lib = self.verifier.load_library()
  File "c:\Python27\lib\site-packages\cffi\verifier.py", line 75, in load_librar
y
    return self._load_library()
  File "c:\Python27\lib\site-packages\cffi\verifier.py", line 151, in _load_libr
ary
    return self._vengine.load_library()
  File "c:\Python27\lib\site-packages\cffi\vengine_cpy.py", line 138, in load_li
brary
    raise ffiplatform.VerificationError(error)
cffi.ffiplatform.VerificationError: importing 'c:\\Python27\\lib\\site-packages\
\cryptography\\_Cryptography_cffi_444d7397xa22f8491.pyd': DLL load failed: The s
pecified module could not be found.

这实际上是错误日志还是只是标准的输出?另外,能不能请人解释一下,为什么在我的Python脚本中添加一个.bat文件会让这个命令正常工作?

谢谢

2 个回答

0

我遇到了类似的问题(我在Windows 7上使用虚拟环境)。

我发现,对于旧版本的scrapy,比如说 pip install scrapy==0.18.4,它会自动在我的虚拟环境中创建一个 scrapy.bat 文件,路径是 {VENV_ROOT_FOLDER}\Scripts\scrapy.bat

但是如果我使用最新的scrapy(目前是版本0.24.2),就没有这个 scrapy.bat 文件了。

因为我想用最新的scrapy版本,所以我做的办法是把一个 scrapy.bat 文件复制到它的Scripts文件夹里,这样问题就解决了。

1

pip install scrapy 这个命令会在Windows的Python Scripts文件夹里安装一个叫做 scrapy 的文件,默认位置是 C:\Python27\Scripts。不过,C:\Python27\Scripts\scrapy 其实是一个Python文件,虽然它没有 .py 的后缀。运行这个文件有两种方法。我比较喜欢用 Git Shell,因为 scrapy 的可执行权限已经设置好了,可以直接运行。

如果你想继续使用 cmd.exe,另一种方法是创建一个批处理文件,内容如下:

@echo off
c:\Python27\python c:\Python27\Scripts\scrapy %*

把这个文件保存到 Scripts 文件夹,命名为 scrapy.bat(假设你的 PATH 环境变量中已经包含了 C:\Python27;C:\Python27\Scripts),然后重启 cmd.exe,这样你就可以在命令行中运行它了。

撰写回答