Python 中的打包经历了一段麻烦和混乱的历史。谢天谢地,情况已经稳定下来,一个名为 pip 的工具已经成为通用 Python 包安装工具中的领跑者。对于更多的专业用途,如数值计算或科学计算,依赖于 To.T0,NoPy OntT1 或 Po.T2;Stupy Ont3 包。
在本附录中,我们将重点介绍 pip,因为它受到了核心 Python 开发人员的正式认可,并提供了开箱即用的支持。尽管 pip 并没有随 Python 一起发布,但其中包含了一个名为 EnsureIP 的安装 pip 的工具。这样做是为了让 pip 以不同于 Python 语言和标准库的速度发展。
通常不需要在最新的 Python 版本中安装 pip,因为在安装 Python 或创建新的虚拟环境时会自动调用 EnsureIP。如果出于某种原因需要手动安装 pip,只需发出以下命令:
$ python -m ensurepipensurepip模块将完成其余工作。但请记住,pip 将安装到与您在此调用中调用的 python 解释器相对应的环境中。
pip 工具可以在一个中央存储库中搜索软件包——即Python 软件包索引或PyPI,也称为“Cheeseshop”——然后下载并安装它们及其依赖项。您可以在浏览 PyPIhttps://pypi.python.org/pypi 。这是一种非常方便的安装 Python 软件的方法,因此最好了解如何使用它。
我们将通过安装 nose 测试工具来演示如何使用 pip。nose命令是一种用于运行基于unittest的测试的强大工具,例如我们在第 10 章、单元测试中使用 Python 标准库开发的测试。它能做的一件非常有用的事情是发现并运行所有的测试。这意味着您不需要在代码中添加unittest.main();您可以使用nose查找并运行您的测试。
不过,首先,我们需要做一些基础工作。让我们创建一个虚拟环境(请参见附录 B、打包和分发,这样我们就不会无意中将 Python 安装到我们的系统中。使用pyenv创建虚拟环境,并激活:
$ python3 -m venv test_env
$ source activate test_env/bin/activate
(test_env) $由于pip的更新频率远高于 Python 本身,因此在任何新的虚拟环境中升级pip都是一种很好的做法,所以让我们这样做吧。幸运的是,pip能够自我更新:
(test_env) $ pip install --upgrade pip
Collecting pip
Using cached pip-8.1.2-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 8.1.1
Uninstalling pip-8.1.1:
Successfully uninstalled pip-8.1.1
Successfully installed pip-8.1.2如果您不升级 pip,它将在每次使用时向您发出警告,如果您上次升级后有新版本可用。
现在让我们使用 pip 来安装机头。pip 使用子命令决定要做什么,并安装您使用的模块pip install package-name:
(test_env) $ pip install nose
Collecting nose
Downloading nose-1.3.7-py3-none-any.whl (154kB)
100% |████████████████████████████████| 163kB 2.1MB/s
Installing collected packages: nose
Successfully installed nose-1.3.7如果成功,nose 就可以在我们的虚拟环境中使用了。让我们通过尝试在 REPL 处导入并查找安装路径来检查它是否可用:
(test_env) $ python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import nose
>>> nose.__file__
'/Users/sixty_north/.virtualenvs/test_env/lib/python3.5/site-packages/nose/__init__.py'除了安装模块外,nose还在虚拟环境的 bin 目录中安装nosetests程序。为了真正地锦上添花,让我们使用nosetests运行第 11 章中palindrome.py的测试,使用 PDB进行调试:
(test_env) $ cd palindrome
(test_env) $ nosetests palindrome.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK您还可以使用 pip 从文件中的本地包安装,而不是从 Python 包索引安装。为此,只需将打包发行版的文件名传递给pipinstall 即可。例如,在附录 B、包和**分发中,我们展示了如何使用distutils构建所谓的源分发。要使用pip安装此软件,请执行以下操作:
(test_env) $ palindrome/dist
(test_env) $ pip install palindrome-1.0.zip使用 pip 安装包而不是直接调用源发行版的setup.py的一个关键优势是,pip 知道如何卸载包。只需使用uninstall子命令:
(test_env) $ pip uninstall palindrome-1.0.zip
Uninstalling palindrome-1.0:
Proceed (y/n)? y
Successfully uninstalled palindrome-1.0