# 安裝指南
> 譯者:[OSGeo 中國](https://www.osgeo.cn/)
## 安裝 Scrapy
scrapy在cpython(默認的Python實現)和pypypy(從pypy 5.9開始)下運行于python 2.7和python 3.4或更高版本。
如果你在用 [Anaconda](https://docs.anaconda.com/anaconda/) 或 [Miniconda](https://conda.io/docs/user-guide/install/index.html) ,您可以從 [conda-forge](https://conda-forge.org/) 頻道,它有最新的Linux、Windows和OS X軟件包。
使用安裝 Scrapy `conda` 運行:
```py
conda install -c conda-forge scrapy
```
或者,如果您已經熟悉了python包的安裝,那么可以從pypi安裝scrappy及其依賴項,方法是:
```py
pip install Scrapy
```
請注意,有時這可能需要根據操作系統解決一些零碎依賴項的編譯問題,因此請確保檢查 [平臺特定安裝說明](#intro-install-platform-notes) .
我們強烈建議您在 [a dedicated virtualenv](#intro-using-virtualenv) ,以避免與系統包沖突。
有關更詳細和平臺特定的說明以及故障排除信息,請閱讀。
### 很好知道的事情
scrappy是用純python編寫的,它依賴于幾個關鍵的python包(以及其他包):
* [lxml](http://lxml.de/) 一個高效的XML和HTML解析器
* [parsel](https://pypi.python.org/pypi/parsel) ,一個寫在lxml上面的html/xml數據提取庫,
* [w3lib](https://pypi.python.org/pypi/w3lib) ,用于處理URL和網頁編碼的多用途幫助程序
* [twisted](https://twistedmatrix.com/) 異步網絡框架
* [cryptography](https://cryptography.io/) 和 [pyOpenSSL](https://pypi.python.org/pypi/pyOpenSSL) ,處理各種網絡級安全需求
Scrapy測試的最小版本是:
* 扭曲14
* LXML 3.4
* PyopSnSL 0.14
Scrapy可以與這些軟件包的舊版本一起工作,但不能保證它會繼續工作,因為它沒有針對它們進行測試。
其中一些軟件包本身依賴于非python軟件包,這些軟件包可能需要依賴于您的平臺的其他安裝步驟。請檢查 [platform-specific guides below](#intro-install-platform-notes) .
如果與這些依賴項相關的任何問題,請參閱它們各自的安裝說明:
* [lxml installation](http://lxml.de/installation.html)
* [cryptography installation](https://cryptography.io/en/latest/installation/)
### 使用虛擬環境(推薦)
tl;dr:我們建議在所有平臺上的虛擬環境中安裝scrapy。
python包可以在全局(也就是系統范圍)或用戶空間中安裝。我們不建議在系統范圍內安裝Scrapy。
相反,我們建議您在所謂的“虛擬環境”中安裝Scrapy。( [virtualenv](https://virtualenv.pypa.io) )virtualenvs允許您不與已經安裝的python系統包沖突(這可能會破壞某些系統工具和腳本),并且仍然可以使用 `pip` (沒有) `sudo` 諸如此類。
要開始使用虛擬環境,請參見 [virtualenv installation instructions](https://virtualenv.pypa.io/en/stable/installation/) . 要在全球范圍內安裝它(讓它在全球范圍內安裝實際上有助于實現這一點),應該運行:
```py
$ [sudo] pip install virtualenv
```
檢查這個 [user guide](https://virtualenv.pypa.io/en/stable/userguide/) 關于如何創建virtualenv。
注解
如果您使用Linux或OS X, [virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/install.html) 是創建virtualenv的便利工具。
創建virtualenv后,可以在其中安裝scrapy `pip` 就像其他的python包一樣。(見 [platform-specific guides](#intro-install-platform-notes) 下面是您可能需要預先安裝的非python依賴項)。
默認情況下,可以創建python virtualenv來使用python 2或python 3。
* 如果要使用python 3安裝scrapy,請在python 3 virtualenv中安裝scrapy。
* 如果您想用python 2安裝scrapy,請在python 2 virtualenv中安裝scrapy。
## 平臺特定安裝說明
### Windows
雖然可以使用pip在Windows上安裝scrapy,但我們建議您安裝 [Anaconda](https://docs.anaconda.com/anaconda/) 或 [Miniconda](https://conda.io/docs/user-guide/install/index.html) 并使用來自 [conda-forge](https://conda-forge.org/) 這樣可以避免大多數安裝問題。
安裝后 [Anaconda](https://docs.anaconda.com/anaconda/) 或 [Miniconda](https://conda.io/docs/user-guide/install/index.html) ,安裝 Scrapy :
```py
conda install -c conda-forge scrapy
```
### Ubuntu 14.04或以上
Scrapy目前已經用LXML、Twisted和PyOpenSSL的最新版本進行了測試,并且與最新的Ubuntu發行版兼容。但是它也應該支持Ubuntu的舊版本,比如Ubuntu14.04,盡管存在與TLS連接相關的潛在問題。
**Don't** 使用 `python-scrapy` Ubuntu提供的軟件包,它們通常太舊,速度太慢,趕不上最新的垃圾。
要在Ubuntu(或基于Ubuntu的)系統上安裝Scrapy,需要安裝以下依賴項:
```py
sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
```
* `python-dev`, `zlib1g-dev`, `libxml2-dev` and `libxslt1-dev` are required for `lxml`
* `libssl-dev` and `libffi-dev` are required for `cryptography`
如果要在python 3上安裝scrapy,還需要python 3開發頭:
```py
sudo apt-get install python3 python3-dev
```
里面 [virtualenv](#intro-using-virtualenv) ,您可以安裝Scrapy `pip` 之后::
```py
pip install scrapy
```
注解
相同的非python依賴項可用于在debian jessie(8.0)及更高版本中安裝scrapy。
### Mac OS X
構建Scrapy的依賴項需要有一個C編譯器和開發頭。在OS X上,這通常由蘋果的Xcode開發工具提供。要安裝xcode命令行工具,請打開終端窗口并運行:
```py
xcode-select --install
```
有一個 [known issue](https://github.com/pypa/pip/issues/2468) 防止 `pip` 更新系統包。必須解決此問題才能成功安裝Scrapy及其依賴項。以下是一些建議的解決方案:
* _(推薦)_ **Don't** 使用系統python,安裝一個新的、更新的版本,它不會與系統的其他部分沖突。以下是如何使用 [homebrew](https://brew.sh/) 包管理器:
* 安裝 [homebrew](https://brew.sh/) 遵循https://brew.sh中的說明/
* 更新你的 `PATH` 變量,說明應在系統包之前使用自制包(更改 `.bashrc` 到 `.zshrc` 如果你在使用 [zsh](https://www.zsh.org/) 作為默認Shell)::
```py
echo "export PATH=/usr/local/bin:/usr/local/sbin:$PATH" >> ~/.bashrc
```
* 再裝填 `.bashrc` 為確保變更發生:
```py
source ~/.bashrc
```
* 安裝python::
```py
brew install python
```
* 最新版本的python `pip` 與它們捆綁在一起,這樣您就不需要單獨安裝。如果不是這樣,請升級python::
```py
brew update; brew upgrade python
```
* [*](#id1)(可選)*在隔離的python環境中安裝scrapy。
此方法是解決上述OS X問題的一種方法,但它是管理依賴性的總體良好實踐,可以補充第一種方法。
[virtualenv](https://virtualenv.pypa.io) 是一個可以用來在Python中創建虛擬環境的工具。我們建議閱讀http://docs.python-guide.org/en/latest/dev/virtualenvs/這樣的教程開始學習。
在任何這些解決方法之后,您都應該能夠安裝scrapy::
```py
pip install Scrapy
```
### PyPy
我們建議使用最新的Pypy版本。測試版本為5.9.0。對于pypy3,只測試了Linux安裝。
大多數依賴于廢品的人現在都有cpython的二進制輪子,而不是pypy的。這意味著這些依賴項將在安裝期間構建。在OSX上,您可能會面臨構建加密依賴關系的問題,本文描述了該問題的解決方案。 [here](https://github.com/pyca/cryptography/issues/2692#issuecomment-272773481) ,就是 `brew install openssl` 然后導出此命令推薦的標志(僅在安裝scrapy時需要)。在Linux上安裝除了安裝構建依賴項之外沒有任何特殊問題。未測試在Windows上安裝帶有Pypy的Scrapy。
您可以通過運行來檢查Scrapy是否安裝正確。 `scrapy bench` . 如果此命令給出錯誤,例如 `TypeError: ... got 2 unexpected keyword arguments` ,這意味著安裝工具無法獲取一個Pypy特定的依賴項。要解決此問題,請運行 `pip install 'PyPyDispatcher>=2.1.0'` .
## 故障排除
### attributeError:“module”對象沒有屬性“op u no u tlsv1 u 1”
安裝或升級scrappy、twisted或pyopenssl之后,可能會得到以下跟蹤的異常:
```py
[…]
File "[…]/site-packages/twisted/protocols/tls.py", line 63, in <module>
from twisted.internet._sslverify import _setAcceptableProtocols
File "[…]/site-packages/twisted/internet/_sslverify.py", line 38, in <module>
TLSVersion.TLSv1_1: SSL.OP_NO_TLSv1_1,
AttributeError: 'module' object has no attribute 'OP_NO_TLSv1_1'
```
您得到這個異常的原因是您的系統或虛擬環境有一個您的Twisted版本不支持的pyopenssl版本。
要安裝您的Twisted版本支持的pyopenssl版本,請使用 `tls` 額外選項:
```py
pip install twisted[tls]
```
有關詳細信息,請參閱 [Issue #2473](https://github.com/scrapy/scrapy/issues/2473) .
- 簡介
- 第一步
- Scrapy at a glance
- 安裝指南
- Scrapy 教程
- 實例
- 基本概念
- 命令行工具
- Spider
- 選擇器
- 項目
- 項目加載器
- Scrapy shell
- 項目管道
- Feed 導出
- 請求和響應
- 鏈接提取器
- 設置
- 例外情況
- 內置服務
- Logging
- 統計數據集合
- 發送電子郵件
- 遠程登錄控制臺
- Web服務
- 解決具體問題
- 常見問題
- 調試spiders
- Spider 合約
- 常用做法
- 通用爬蟲
- 使用瀏覽器的開發人員工具進行抓取
- 調試內存泄漏
- 下載和處理文件和圖像
- 部署 Spider
- AutoThrottle 擴展
- Benchmarking
- 作業:暫停和恢復爬行
- 延伸 Scrapy
- 體系結構概述
- 下載器中間件
- Spider 中間件
- 擴展
- 核心API
- 信號
- 條目導出器
- 其余所有
- 發行說明
- 為 Scrapy 貢獻
- 版本控制和API穩定性