第三方模块

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Python 有大量的内置模块库(可谓 “应有尽有”)。

还有更多的第三方模块。可在 Python 包索引 或 PyPi 中查看。或者直接在 Google 上搜索特定主题。

如何处理 Python 的第三方依赖项是一个不断发展的话题。本节仅介绍基础知识,以帮助你理解其工作原理。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python/BasicConceptsGroup -.-> python/python_shell("Python Shell") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/ObjectOrientedProgrammingGroup -.-> python/constructor("Constructor") python/AdvancedTopicsGroup -.-> python/regular_expressions("Regular Expressions") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("Numerical Computing") subgraph Lab Skills python/python_shell -.-> lab-132739{{"第三方模块"}} python/importing_modules -.-> lab-132739{{"第三方模块"}} python/standard_libraries -.-> lab-132739{{"第三方模块"}} python/constructor -.-> lab-132739{{"第三方模块"}} python/regular_expressions -.-> lab-132739{{"第三方模块"}} python/os_system -.-> lab-132739{{"第三方模块"}} python/numerical_computing -.-> lab-132739{{"第三方模块"}} end

模块搜索路径

sys.path 是一个目录,其中包含 import 语句检查的所有目录的列表。查看一下:

>>> import sys
>>> sys.path
... 查看结果...
>>>

如果你导入某个内容但它不在这些目录中的任何一个中,你将得到一个 ImportError 异常。

标准库模块

Python 标准库中的模块通常来自诸如 /usr/local/lib/python3.6 这样的位置。你可以通过一个简短的测试来确定:

>>> import re
>>> re
<module're' from '/usr/local/lib/python3.6/re.py'>
>>>

在交互式解释器(REPL)中简单查看一个模块是一个很好的调试技巧。它会告诉你文件的位置。

第三方模块

第三方模块通常位于专门的 site-packages 目录中。如果你执行与上述相同的步骤,就会看到它:

>>> import numpy
>>> numpy
<module 'numpy' from '/usr/local/lib/python3.6/site-packages/numpy/__init__.py'>
>>>

同样,如果你试图弄清楚与 import 相关的某些内容为何未按预期工作,查看模块是一个很好的调试技巧。

安装模块

安装第三方模块最常用的方法是使用 pip。例如:

$ python3 -m pip install packagename

此命令将下载该软件包并将其安装到 site-packages 目录中。

问题

  • 你可能正在使用一个你无法直接控制的 Python 安装版本。
    • 公司批准的安装版本
    • 你正在使用操作系统附带的 Python 版本。
  • 你可能没有权限在计算机中安装全局软件包。
  • 可能存在其他依赖项。

虚拟环境

解决软件包安装问题的一个常见方法是为自己创建一个所谓的“虚拟环境”。当然,实现这一点并没有“唯一的方法”——实际上,有几种相互竞争的工具和技术。不过,如果你使用的是标准的 Python 安装,你可以尝试输入以下命令:

$ sudo apt install python3-venv
$ python -m venv mypython
bash %

等待片刻后,你将拥有一个新的目录 mypython,这是你自己的小型 Python 安装环境。在该目录中,你会找到一个 bin/ 目录(适用于 Unix)或一个 Scripts/ 目录(适用于 Windows)。如果你运行在那里找到的 activate 脚本,它将“激活”这个版本的 Python,使其成为 shell 的默认 python 命令。例如:

$ source mypython/bin/activate
(mypython) bash %

从这里开始,你现在可以为自己安装 Python 软件包了。例如:

(mypython) $ python -m pip install pandas

...

对于实验和尝试不同的软件包来说,虚拟环境通常能很好地工作。另一方面,如果你正在创建一个应用程序,并且它有特定的软件包依赖项,那就是一个稍有不同的问题了。

在你的应用程序中处理第三方依赖项

如果你编写了一个应用程序,并且它有特定的第三方依赖项,那么一个挑战在于创建和维护包含你的代码及依赖项的环境。遗憾的是,在Python的发展历程中,这一直是一个非常混乱且变化频繁的领域。即使到现在,它仍在不断发展。

我不会提供很快就会过时的信息,而是建议你参考Python打包用户指南

练习9.4:创建虚拟环境

看看你是否能重现上述创建虚拟环境并在其中安装pandas的步骤。

总结

恭喜你!你已经完成了第三方模块实验。你可以在LabEx中练习更多实验来提升你的技能。