目录 | 上一节 (9.1 包) | 下一节 (9.3 版本分发)

9.2 第三方模块

Python 拥有一个包含各种内置模块的大型库(自带电池(batteries included))(译注:“自带电池”来自于官方文档的翻译,意为“功能齐全”)。

甚至还有很多第三方模块(可以使用)。请到 Python 包索引( PyPi ) 查看,或者使用谷歌搜索特定主题。

对于 Python 而言,如何处理第三方依赖关系是一个不断演化的主题。本节仅仅涵盖一些基础知识,帮助你了解它们是如何工作的。

模块搜索路径

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

>>> import sys
>>> sys.path
... look at the result ...
>>>

如果导入的内容不在目录中。那么将会触发 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'>
>>>

同样,如果要弄清楚导入的第三方模块为什么没有像预期那样工作,那么查看模块的位置是一个很好的调试技巧。

安装模块

安装第三方模块最常用的技术是使用 pip。示例:

bash % python3 -m pip install packagename

此命令会下载包并将包安装到 site-packages 目录中。

问题

  • 你可能正在使用你不能直接控制的 Python。

    • 企业认可的 Python
    • 操作系统自带的 Python
  • 你可能没有权限在计算机中安装全局包
  • 可能还有其它依赖

虚拟环境

对于包安装问题,一个常见的解决方案是为自己创建所谓的“虚拟环境”。自然,创建虚拟环境的方式不止这一种——实际上,有好几种相互竞争的工具和技术。如果你正在使用标准方式安装的 Python,可以尝试输入以下代码创建虚拟环境:

bash % python -m venv mypython
bash %

稍等片刻后,你将拥有一个新目录 mypython,该目录安装了你自己的 Python。在 mypython 目录中,可以找到 bin/ 目录(Unix 系统)或者 Scripts/ 目录(Windows 系统)。运行 bin/ 目录下的 activate 脚本会“激活“ 对应的 Python,使其成为 shell 的默认 python 命令。示例:

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

现在,你可以从这里开始安装自己的 Python 包了。示例:

(mypython) bash % python -m pip install pandas
...

通常,为了试验和试用不同的包,可以使用虚拟环境。另一方面,如果你正在创建一个应用并且它有特定的包依赖关系,那么问题会稍有不同。

处理应用中的第三方依赖

如果你已经编写了一个应用,并且该应用具有特定的第三方依赖,那么创建并保存一个包括你自己的代码及其依赖的环境将会是一个挑战。可悲的是,这一直是一个非常混乱和频繁变化的领域。即使到现在,它仍在继续演变。

我不想向你提供必定会过时的信息,建议查阅 Python 打包用户指南

练习

练习 9.4:创建虚拟环境

看看你是否可以像上面一样创建一个虚拟环境并在虚拟环境中安装 pandas。

目录 | 上一节 (9.1 包) | 下一节 (9.3 版本分发)

注:完整翻译见 https://github.com/codists/practical-python-zh

翻译:《实用的Python编程》09_02_Third_party的更多相关文章

  1. 翻译:《实用的Python编程》InstructorNotes

    实用的 Python 编程--讲师说明 作者:戴维·比兹利(David Beazley) 概述 对于如何使用我的课程"实用的 Python 编程"进行教学的问题,本文档提供一些通用 ...

  2. 翻译:《实用的Python编程》README

    欢迎光临 大约 25 年前,当我第一次学习 Python 时,发现 Python 竟然可以被高效地应用到各种混乱的工作项目上,我立即被震惊了.15 年前,我自己也将这种乐趣教授给别人.教学的结果就是本 ...

  3. 翻译:《实用的Python编程》05_02_Classes_encapsulation

    目录 | 上一节 (5.1 再谈字典) | 下一节 (6 生成器) 5.2 类和封装 创建类时,通常会尝试将类的内部细节进行封装.本节介绍 Python 编程中有关封装的习惯用法(包括私有变量和私有属 ...

  4. 翻译:《实用的Python编程》04_02_Inheritance

    目录 | 上一节 (4.1 类) | 下一节 (4.3 特殊方法) 4.2 继承 继承(inheritance)是编写可扩展程序程序的常用手段.本节对继承的思想(idea)进行探讨. 简介 继承用于特 ...

  5. 翻译:《实用的Python编程》01_02_Hello_world

    目录 | 上一节 (1.1 Python) | 下一节 (1.3 数字) 1.2 第一个程序 本节讨论有关如何创建一个程序.运行解释器和调试的基础知识. 运行 Python Python 程序始终在解 ...

  6. 翻译:《实用的Python编程》03_03_Error_checking

    目录 | 上一节 (3.2 深入函数) | 下一节 (3.4 模块) 3.3 错误检查 虽然前面已经介绍了异常,但本节补充一些有关错误检查和异常处理的其它细节. 程序是如何运行失败的 Python 不 ...

  7. 翻译:《实用的Python编程》03_04_Modules

    目录 | 上一节 (3.3 错误检查) | 下一节 (3.5 主模块) 3.4 模块 本节介绍模块的概念以及如何使用跨多个文件的函数. 模块和导入 任何一个 Python 源文件都是一个模块. # f ...

  8. 翻译:《实用的Python编程》03_05_Main_module

    目录 | 上一节 (3.4 模块) | 下一节 (3.6 设计讨论) 3.5 主模块 本节介绍主程序(主模块)的概念 主函数 在许多编程语言中,存在一个主函数或者主方法的概念. // c / c++ ...

  9. 翻译:《实用的Python编程》04_01_Class

    目录 | 上一节 (3.6 设计讨论) | 下一节 (4.2 继承) 4.1 类 本节介绍 class 语句以及创建新对象的方式. 面向对象编程(OOP) 面向对象编程是一种将代码组织成对象集合的编程 ...

随机推荐

  1. Captain technology INC:全球新能源汽车格局突变

    美国能源信息署EIA的统计数据显示,2020年上半年全美含纯电动和插电混动在内的新能源乘用车总销量仅为11.1万辆,同比缩水25%.虽然特斯拉在第三季度靠着13.93万辆的销量迎来了环比387%.同比 ...

  2. django学习-26.admin管理后台里:修改登录页面标题,修改登录框标题,修改首页标题

    目录结构 1.前言 2.完整的操作步骤 2.1.第一步:查看[site.py]的源码 2.2.第二步:在应用[hello]所在目录里的[admin.py]里重写三个属性的属性值 2.3.第三步:重启服 ...

  3. scala:函数作为值或参数进行传递、作为返回值进行返回

    @ 目录 函数可以作为值进行传递 函数可以作为参数进行传递 函数可以作为返回值进行返回 什么是匿名函数 函数可以作为值进行传递 语法var f = 函数名 _ 如果明确了变量的数据类型,那么下划线可以 ...

  4. C#关于panle重叠

    当多个panle重叠不显示不出来的时候  选择视图---------------其它窗口----------------文档大纲  然后拖动进行调整

  5. GET和POST两者的区别

    GET 和 POST 是 HTTP 协议中的两种发送请求的基本方法,对于前端开发者而言,几乎每天都在使用它们,再熟悉不过了,一般也都能说出几点两者的区别. 如果面试中被问到这个问题,先回答一下几点,肯 ...

  6. ffmpeg番外篇:听说这款水印曾经在某音很火?办它!

    今天在瞎逛时,偶然看到一个CSDN上的哥们说,他们曾经被一个水印难住了,仔细看了下,感觉可以用一行命令实现. 需求如下:视频加gif水印,gif循环,同时n秒后水印切换位置继续循环 这哥们遇到了两个问 ...

  7. apiAutoTest:支持自定义函数,用例中可调用

    0. 前言 apiAutoTest从去年8月以来开源至今,也更新了不少内容,一起来看看吧 第一个版本 - 2020/08/08 增加实际响应存储数据的方法,并在字典可以处理依赖见tools/svae_ ...

  8. 手把手教你SpringBoot2整合Redis

    此文仅为初学java的同学学习,大佬请勿喷,文末我会附上完整代码包供大家参考 redis的搭建教程此处略过,大家自行百度,本文的教程开始: 一.先在pom.xml中添加相关依赖 <!--redi ...

  9. C#.NET操作数据库通用类

    下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...

  10. JVM笔记 -- JVM的生命周期介绍

    Github仓库地址:https://github.com/Damaer/JvmNote 文档地址:https://damaer.github.io/JvmNote/ JVM生命周期 启动 执行 退出 ...