翻译:《实用的Python编程》09_02_Third_party
目录 | 上一节 (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的更多相关文章
- 翻译:《实用的Python编程》InstructorNotes
实用的 Python 编程--讲师说明 作者:戴维·比兹利(David Beazley) 概述 对于如何使用我的课程"实用的 Python 编程"进行教学的问题,本文档提供一些通用 ...
- 翻译:《实用的Python编程》README
欢迎光临 大约 25 年前,当我第一次学习 Python 时,发现 Python 竟然可以被高效地应用到各种混乱的工作项目上,我立即被震惊了.15 年前,我自己也将这种乐趣教授给别人.教学的结果就是本 ...
- 翻译:《实用的Python编程》05_02_Classes_encapsulation
目录 | 上一节 (5.1 再谈字典) | 下一节 (6 生成器) 5.2 类和封装 创建类时,通常会尝试将类的内部细节进行封装.本节介绍 Python 编程中有关封装的习惯用法(包括私有变量和私有属 ...
- 翻译:《实用的Python编程》04_02_Inheritance
目录 | 上一节 (4.1 类) | 下一节 (4.3 特殊方法) 4.2 继承 继承(inheritance)是编写可扩展程序程序的常用手段.本节对继承的思想(idea)进行探讨. 简介 继承用于特 ...
- 翻译:《实用的Python编程》01_02_Hello_world
目录 | 上一节 (1.1 Python) | 下一节 (1.3 数字) 1.2 第一个程序 本节讨论有关如何创建一个程序.运行解释器和调试的基础知识. 运行 Python Python 程序始终在解 ...
- 翻译:《实用的Python编程》03_03_Error_checking
目录 | 上一节 (3.2 深入函数) | 下一节 (3.4 模块) 3.3 错误检查 虽然前面已经介绍了异常,但本节补充一些有关错误检查和异常处理的其它细节. 程序是如何运行失败的 Python 不 ...
- 翻译:《实用的Python编程》03_04_Modules
目录 | 上一节 (3.3 错误检查) | 下一节 (3.5 主模块) 3.4 模块 本节介绍模块的概念以及如何使用跨多个文件的函数. 模块和导入 任何一个 Python 源文件都是一个模块. # f ...
- 翻译:《实用的Python编程》03_05_Main_module
目录 | 上一节 (3.4 模块) | 下一节 (3.6 设计讨论) 3.5 主模块 本节介绍主程序(主模块)的概念 主函数 在许多编程语言中,存在一个主函数或者主方法的概念. // c / c++ ...
- 翻译:《实用的Python编程》04_01_Class
目录 | 上一节 (3.6 设计讨论) | 下一节 (4.2 继承) 4.1 类 本节介绍 class 语句以及创建新对象的方式. 面向对象编程(OOP) 面向对象编程是一种将代码组织成对象集合的编程 ...
随机推荐
- 验证销售部门的数据查看权限-脚本demo
1 # coding:utf-8 2 ''' 3 @file: run_old.py 4 @author: jingsheng hong 5 @ide: PyCharm 6 @createTime: ...
- np.mean(img, axis=(0, 1))
np.mean(img, axis=(0, 1)) img 是shape为(H,W,3)的图片 np.mean(img, axis=(0, 1)) 是求出各个通道的平均值,shape是 (3, ) ...
- ROS 安装完成后运行小乌龟示例程序
安装ROS成功后,在Beginner Tutorials中有一个简单的示例程序. 在Terminal中运行以下命令: $ roscore 新开一个terminal,运行以下命令,打开小乌龟窗口: $ ...
- 【HTB系列】靶机Access的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...
- 关于MacBook Air/Pro 外接显示器时,显示器黑屏无反应的解决方法,顺便求助M1芯片的mac 外接显示器如何开启Hidpi
显示器黑屏,无反应,频繁闪烁的原因 先说结论,直接换type-c转DP的显示器连接线吧,如果显示器不支持dp接口,那自求多福吧. 事情是这样的,m1版本的macbook air 刚发布就马上入手了一台 ...
- 微信小程序:标签字符串直接变成标签来显示要通过富文本技术
rich-text标签存在nodes属性直接接受标签字符串
- 保姆级别学生党安装Clion IDE(面向华师同学)
保姆级别学生党安装Clion IDE(面向华师同学) 界面UI 废话不多说,直接上图 具备功能 UI美观 (下面会介绍) 基础的代码编写能力 大容量的IDE插件 (下面会介绍) 代码补全,以及搭配Ki ...
- (报错解决)Exception encountered during context initialization
转: (报错解决)Exception encountered during context initialization 关键词 JavaEE JavaWeb eclipse XML AspectJ ...
- 剑指 Offer 46. 把数字翻译成字符串 + 动态规划
剑指 Offer 46. 把数字翻译成字符串 Offer_46 题目描述 题解分析 本题的解题思路是使用动态规划,首先得出递推公式如下 dp[i] = dp[i-1]+dp[i-2](如果s[i-1] ...
- IDEA中部署servlet
配置和不是servlet 第一种方法:(两种方法不能混用,使用第一种方法后,尽量删除第二种方法的注解方式) 使用xml文件配置: name没有什么特别的,就是需要统一即可.url-pattern中的地 ...