【Python高级编程】笔记一——Python现状

【Python 高级编程】笔记一

第一章 Python现状

主要内容

  • Python3和Python2的主要差异
  • 应用层Python隔离及其优点,及常用的虚拟化工具
  • 系统级环境隔离及其优点
  • 容器化与虚拟化对比
  • 什么是PEP、CPython、Jython、IronPython、Pypy、PyPI

Python3和Python2的主要差异

  • 语法变化,例如print从语句变为函数
  • 标准库的变化,比如标准库中的模块结构变化,urlparser->urllib.parse
  • 数据类型与集合的变化,如Python3.0和3.1不支持字符串使用u前缀,虽然Python3.3又恢复了

兼容Python2和Python3的代码

if sys.version_info < (3,0,0):
	import module_of_py2
else
	import module_of_py3

引导启动Pip

python -m ensurepip

应用层Python隔离

在基于Unix的系统和Linux上,pip install往往需要超级权限,这是因为系统本身自带了Python解释器(可能是旧的低版本的),不建议从PyPI安装系统级的Python包,这是因为系统自带的Python往往也是系统所本身一些软件的依赖,如果贸然更新可能出现错误,因此我们需要隔离,其好处在于

  • 解决了不同项目有不同依赖的问题
  • 项目不再受限于系统发行仓库中包的版本
  • 不会破坏依赖特定包版本的其他系统服务,因为新版软件包只存在于隔离环境内部
  • 项目依赖的包列表可以轻松锁定,复制起来也很容易
virtualenv

virtualenv是最常用的虚拟化工具

virtualenv ENV

可以创建一个虚拟环境
其中
ENV
|-bin:Python可执行文件和其他包提供的脚本和可执行文件
|-lib Python的支持库文件
|-include Python的支持库文件
创建好虚拟环境后,要激活虚拟环境

source ENV/bin/activate
# ENV/Scripts/activate.bat # for Windows
其他虚拟换工具
  • venv——pyvenv ENV
  • buildoutui

系统级环境隔离

为何需要系统级环境隔离?

举个例子,基于Web应用的后端服务是一个超级复杂的应用实例。最简单的软件栈(software stack)通常由几层组成(从最底层开始):

  • 数据库或其他类型的存储
  • Python实现的应用程序代码
  • HTTP服务器,例如Apache或NGINX

无论是HTTP服务器(例如NGINX)还是关系型数据库管理系统(RDBMS,例如PostgreSQL),在不同的系统上通常有不同的版本,如果没有合适的工具,很难保证开发团队中每个人使用的每个组件的版本完全相同(由于操作系统与生产环境的差异导致的)。即便Python在跨平台付出了很多,也无法很好地处理一大堆兼容性问题。

这个问题的常见解决方法就是将整个系统隔离为应用程序环境,可以通过系统虚拟化工具来实现

系统级虚拟化的优点
  • 开发环境可以完全匹配生产环境,有助于解决兼容性问题
  • 系统配置工具可以复用与开发环境配置
  • 如果可以自动创建这样的环境,那么新来的团队成员就可以轻松上手项目
  • 开发人员可以直接调用系统底层特性
常用工具
  • Vagrant
容器化和虚拟化的对比

容器是全机器虚拟化的替代方法,它是轻量级的虚拟化方法,内核与操作系统允许运行多个隔离的用户空间实例,容器和主机之间共享操作系统(OS)。Docker是容器的可用实现之一。

常用的生产力工具

生产力工具的不严格定义:使开发过程更简单更有趣的一款软件

  • Ipython
  • bpython
  • ptpython

名词解释

  • PEP Python改进提案(Python Enhancement Proposal)
  • CPython,Python最重要的实现是由C语言编写的,人们大多在讨论的Python实际指CPython
  • Jython是Python的Java实现,将代码编译为Java字节代码,开发人员在Python中可以无缝使用Java类,与CPython相比
    • ☺Jython使用真正的Java垃圾回收,而不是引用计数
    • ☺没有全局解释器锁(Global Interpreter Lock, GIL),在多线程应用中可以充分利用多个内核
    • (╯﹏╰)不支持C/Python扩展API
  • IronPython将Python引入.NET框架中,主要开发人员是微软员工,与Cpython相比
    • ☺没有全局解释器锁(Global Interpreter Lock, GIL)
    • ☺用C#和其他.NET语言编写的代码可以轻松集成到IronPython中,反之亦然
    • ☺通过Silverlight,在所有主流Web浏览器中都可以运行
    • (╯﹏╰)不支持C/Python扩展API
  • Pypy,Pypy利用Python写Python解释器,可以实现CPython难以实现的代码模式,与CPython相比
    • ☺使用垃圾回收,而不是引用计数
    • ☺集成跟踪JIT编译器,可以显著提高性能
    • ☺借鉴了Stackless Python在应用层的无栈特性
    • (╯﹏╰)不支持C/Python扩展API
  • PyPI Python包索引(Python Package Index)

观点

  • 人们之所以设计新的语言,是因为它们发现现有的语言无法以最佳的方式解决问题
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值