配置 Python 开发环境

如果您以前没有使用过 Python,那么拥有一个可用的开发环境非常重要。本书中的食谱将全部用 Python 编写,并混合了交互式示例,但主要作为由 Python 解释器解释的脚本来实现。本节将向您展示如何使用 virtualenv 设置隔离的开发环境并使用 pip 管理项目依赖项。我们还获取了本书的代码并将其安装到 Python 虚拟环境中。

准备工作

我们将专门使用 Python 3.x,特别是在我的例子中使用 3.6.1。 Mac 和 Linux 通常安装了 Python 2 版本,而 Windows 系统则没有。 因此,无论如何都可能需要安装 Python 3。 您可以在 www.python.org 上找到 Python 安装程序的参考。

您可以使用 python --version 检查 Python 的版本

image 2024 01 28 17 18 14 319

pip 随 Python 3.x 一起安装,因此我们将省略其安装说明。此外,本书中的所有命令行示例都在 Mac 上运行。对于 Linux 用户,命令应该是相同的。在 Windows 上,有替代命令(例如 dir 而不是 ls),但不会涵盖这些替代命令。

怎么做

我们将使用 pip 安装许多软件包。这些包被安装到 Python 环境中。通常可能会与其他包发生版本冲突,因此按照书中的方法进行操作的一个好习惯是创建一个新的虚拟 Python 环境,在其中确保我们将使用的包正常工作。

虚拟 Python 环境使用 virtualenv 工具进行管理。可以使用以下命令安装:

~ $ pip install virtualenv
Collecting virtualenv
Using cached virtualenv-15.1.0-py2.py3-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv-15.1.0

现在我们可以使用 virtualenv 了。但在此之前,让我们简单地看一下 pip。此命令从 PyPI 安装 Python 包,PyPI 是一个包存储库,实际上包含数十个包。我们刚刚看到使用 install 子命令来 pip,这可确保安装包。我们还可以使用 pip list 查看当前安装的所有软件包:

~ $ pip list
alabaster (0.7.9)
amqp (1.4.9)
anaconda-client (1.6.0)
anaconda-navigator (1.5.3)
anaconda-project (0.4.1)
aniso8601 (1.3.0)

我已经截断了前几行,因为有很多行。对我来说,安装了 222 个软件包。还可以使用 pip uninstall 后跟包名称来卸载包。 我将留给您尝试一下。 现在回到 virtualenv。 使用 virtualenv 非常简单。 让我们用它来创建一个环境并安装 github 上的代码。 让我们逐步完成以下步骤:

  1. 创建一个代表项目的目录并进入该目录。

    ~ $ mkdir pywscb
    ~ $ cd pywscb
  2. 初始化一个名为 env 的虚拟环境文件夹:

    pywscb $ virtualenv env
    Using base prefix '/Users/michaelheydt/anaconda'
    New python executable in /Users/michaelheydt/pywscb/env/bin/python
    copying /Users/michaelheydt/anaconda/bin/python =>
    /Users/michaelheydt/pywscb/env/bin/python
    copying /Users/michaelheydt/anaconda/bin/../lib/libpython3.6m.dylib
    => /Users/michaelheydt/pywscb/env/lib/libpython3.6m.dylib
    Installing setuptools, pip, wheel...done.
  3. 这将创建一个 env 文件夹。 我们来看看安装了什么。

    pywscb $ ls -la env
    total 8
    drwxr-xr-x 6 michaelheydt staff 204 Jan 18 15:38 .
    drwxr-xr-x 3 michaelheydt staff 102 Jan 18 15:35 ..
    drwxr-xr-x 16 michaelheydt staff 544 Jan 18 15:38 bin
    drwxr-xr-x 3 michaelheydt staff 102 Jan 18 15:35 include
    drwxr-xr-x 4 michaelheydt staff 136 Jan 18 15:38 lib
    -rw-r--r-- 1 michaelheydt staff 60 Jan 18 15:38 pipselfcheck.json
  4. 新我们激活虚拟环境。此命令使用 env 文件夹中的内容来配置 Python。此后,所有 python 活动都与该虚拟环境相关。

    pywscb $ source env/bin/activate
    (env) pywscb $
  5. 我们可以使用以下命令检查 python 是否确实正在使用这个虚拟环境:

    (env) pywscb $ which python
    /Users/michaelheydt/pywscb/env/bin/python

创建虚拟环境后,让我们克隆书籍示例代码并查看其结构。

(env) pywscb $ git clone
https://github.com/PacktBooks/PythonWebScrapingCookbook.git
Cloning into 'PythonWebScrapingCookbook'...
remote: Counting objects: 420, done.
remote: Compressing objects: 100% (316/316), done.
remote: Total 420 (delta 164), reused 344 (delta 88), pack-reused 0
Receiving objects: 100% (420/420), 1.15 MiB | 250.00 KiB/s, done.
Resolving deltas: 100% (164/164), done.
Checking connectivity... done.

这创建了一个 PythonWebScrapingCookbook 目录。

(env) pywscb $ ls -l
total 0
drwxr-xr-x 9 michaelheydt staff 306 Jan 18 16:21 PythonWebScrapingCookbook
drwxr-xr-x 6 michaelheydt staff 204 Jan 18 15:38 env

我们换成它来检查一下内容。

(env) PythonWebScrapingCookbook $ ls -l
total 0
drwxr-xr-x 15 michaelheydt staff 510 Jan 18 16:21 py
drwxr-xr-x 14 michaelheydt staff 476 Jan 18 16:21 www

有两个目录。大多数 Python 代码是 py 目录。 www 包含一些我们将通过本地网络服务器使用的网络内容。 我们看一下 py 目录下的内容:

(env) py $ ls -l
total 0
drwxr-xr-x 9 michaelheydt staff 306 Jan 18 16:21 01
drwxr-xr-x 25 michaelheydt staff 850 Jan 18 16:21 03
drwxr-xr-x 21 michaelheydt staff 714 Jan 18 16:21 04
drwxr-xr-x 10 michaelheydt staff 340 Jan 18 16:21 05
drwxr-xr-x 14 michaelheydt staff 476 Jan 18 16:21 06
drwxr-xr-x 25 michaelheydt staff 850 Jan 18 16:21 07
drwxr-xr-x 14 michaelheydt staff 476 Jan 18 16:21 08
drwxr-xr-x 7 michaelheydt staff 238 Jan 18 16:21 09
drwxr-xr-x 7 michaelheydt staff 238 Jan 18 16:21 10
drwxr-xr-x 9 michaelheydt staff 306 Jan 18 16:21 11
drwxr-xr-x 8 michaelheydt staff 272 Jan 18 16:21 modules

每章的代码都位于与该章匹配的编号文件夹中(第 2 章没有代码,因为它都是交互式 Python)。

请注意,有一个 modules 文件夹。 本书中的一些食谱使用这些模块中的代码。 确保您的 Python 路径指向此文件夹。 在 Mac 和 Linux 上,您可以在 .bash_profile 文件(以及 Windows 上的环境变量对话框)中进行设置:

export
PYTHONPATH="/users/michaelheydt/dropbox/packt/books/pywebscrcookbook/code/py/modules"
export PYTHONPATH

每个文件夹中的内容通常遵循与本章中的菜谱顺序相匹配的编号方案。以下是第 6 章文件夹的内容:

(env) py $ ls -la 06
total 96
drwxr-xr-x 14 michaelheydt staff 476 Jan 18 16:21 .
drwxr-xr-x 14 michaelheydt staff 476 Jan 18 16:26 ..
-rw-r--r-- 1 michaelheydt staff 902 Jan 18 16:21 01_scrapy_retry.py
-rw-r--r-- 1 michaelheydt staff 656 Jan 18 16:21 02_scrapy_redirects.py
-rw-r--r-- 1 michaelheydt staff 1129 Jan 18 16:21 03_scrapy_pagination.py
-rw-r--r-- 1 michaelheydt staff 488 Jan 18 16:21 04_press_and_wait.py
-rw-r--r-- 1 michaelheydt staff 580 Jan 18 16:21 05_allowed_domains.py
-rw-r--r-- 1 michaelheydt staff 826 Jan 18 16:21 06_scrapy_continuous.py
-rw-r--r-- 1 michaelheydt staff 704 Jan 18 16:21 07_scrape_continuous_twitter.py
-rw-r--r-- 1 michaelheydt staff 1409 Jan 18 16:21 08_limit_depth.py
-rw-r--r-- 1 michaelheydt staff 526 Jan 18 16:21 09_limit_length.py
-rw-r--r-- 1 michaelheydt staff 1537 Jan 18 16:21 10_forms_auth.py
-rw-r--r-- 1 michaelheydt staff 597 Jan 18 16:21 11_file_cache.py
-rw-r--r-- 1 michaelheydt staff 1279 Jan 18 16:21 12_parse_differently_based_on_rules.py

在食谱中,我将声明我们将使用 <章节目录>/<食谱文件名> 中的脚本。

恭喜,您现在已经拥有了使用本书代码配置的 Python 环境!

现在就完成了,如果想退出 Python 虚拟环境,可以使用以下命令退出:

(env) py $ deactivate
py $

检查 python 版本我们可以看到它已经切换回来:

py $ which python
/Users/michaelheydt/anaconda/bin/python

我不会在本书的其余部分中使用虚拟环境。当您看到命令提示符时,它们的形式将是 “<directory>$” 或简单的 “$”。

现在让我们继续进行一些抓取。