Python软件包使您可以分解大型系统并以一致的方式组织其模块,以便您和其他人可以有效地使用和重用。 Python的座右铭是“包括电池”,这意味着它在标准库中预装了许多有用的软件包。
但是,您也可以利用许多出色的第三方软件包。 在本教程中,您将学到所有关于什么软件包的确切信息,如何从软件包中导入模块,探索Python标准库中的内置软件包以及安装第三方软件包的所有知识。
什么是包裹?
在讨论软件包之前,让我们讨论模块。 模块是带有* .py扩展名的源文件,您(和其他所有人)在其中放置构成程序的函数和类。 包是Python的分层名称空间概念的体现。 引用Python Zen:
“命名空间是一个很棒的主意-让我们做更多的事!”
要查看整个Python Zen,请在Python交互式会话中输入import this
:
import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
命名空间有助于组织代码并防止命名冲突。 当多个人一起工作或使用其他人开发的软件包时,这一点至关重要。
包代表子包和模块的层次结构,而子包和模块是文件的层次结构,而层次结构不必基于文件系统,其中包和子包是目录和子目录。 它比这灵活得多。
示例包
让我们看一下名为“ ansible”的程序包。 它不是标准库中的软件包。 稍后您将看到如何查找和安装第三方软件包。 现在,让我们检查一下目录文件结构。
这些软件包通常会安装到Python解释器的site-packages目录中,该目录位于“ lib”下的某个位置(取决于版本,操作系统和发行版)。 在Mac上,对于Python 2.7,它将位于“ <解释器根目录> /lib/python2.7/site-packages”中。 这是“ ansible”包的组织方式:
tree ansible -L 1
ansible
├── __init__.py
├── cli
├── compat
├── config
├── constants.py
├── errors
├── executor
├── galaxy
├── inventory
├── module_utils
├── modules
├── parsing
├── playbook
├── plugins
├── template
├── utils
└── vars
15 directories, 2 files
有两个模块和15个目录。 每个目录都是主要ansible包的子包。 在ansible / utils目录中,我们可以看到它包含其他模块,甚至还有一个子包:
tree ansible/utils -L 1
ansible/utils
├── __init__.py
├── boolean.py
├── cmd_functions.py
├── color.py
├── debug.py
├── display.py
├── encrypt.py
├── hashing.py
├── listify.py
├── module_docs.py
├── module_docs_fragments
├── path.py
├── shlex.py
├── unicode.py
└── vars.py
1 directory, 14 files
搜索路径
导入模块时,Python将根据搜索路径(开始搜索的目录列表)通过搜索算法。 搜索路径是sys.path
可用目录的列表,您可以动态地对其进行操作(在搜索路径中添加,删除或移动项目)。 site-packages目录始终存在。
要从ansible / utils导入path.py模块,您需要使用以下命令:
import ansible.utils.path
如果您还想使用标准的os.oath模块,请使用以下命令:
import os.path
现在,您可以使用一个或两个路径模块,而不会因为它们所属的名称空间不同而发生冲突。
探索标准库
标准库有很多软件包。 每当您需要完成某些任务而又不确定如何完成时,都值得探索它。 对于任何通用任务,如数学,shell集成,OS集成,字符串处理,网络和通用文件格式,很有可能在标准库中提供设计良好,性能良好且经过测试的软件包。
您真的可以信任标准库软件包,因为进入标准库非常重要。 该程序包要么是由Python的核心开发人员设计的,要么经过了严格的审查,并在进入标准库之前经常在现场广泛用作第三方库。
这是按主题组织的标准库中的所有软件包 。
聚酰亚胺
标准库很棒,但是您通常会需要一些非标准的特殊功能。 这并不意味着您必须从头开始编写它。 Python拥有一个活跃的社区,可以自由开发和共享许多代码。 输入PyPI-Python包索引 。 PyPI托管所有公开可用的软件包,并提供一站式浏览服务。
浏览PyPI
PyPI以可浏览的索引组织软件包。 您可以按主题,环境,框架,开发,状态,目标受众,许可证,自然语言,编程语言(是的,有支持多种编程语言的Python软件包)和操作系统进行浏览和搜索。
Python 2和Python 3软件包之间也有区别,您可以通过最近下载的数量来查看软件包的受欢迎程度。 例如,ansible包在PyPI上可用 ,这是其元数据:
Downloads (All Versions):
5528 downloads in the last day
72037 downloads in the last week
289967 downloads in the last month
Author: Ansible, Inc.
Home Page: http://ansible.com/
Bug Tracker: http://github.com/ansible/ansible/
License: GPLv3
Categories
Development Status :: 5 - Production/Stable
Environment :: Console
Intended Audience :: Developers
Intended Audience :: Information Technology
Intended Audience :: System Administrators
License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Natural Language :: English
Operating System :: POSIX
Programming Language :: Python :: 2.6
Programming Language :: Python :: 2.7
Topic :: System :: Installation/Setup
Topic :: System :: Systems Administration
Topic :: Utilities
Package Index Owner: James.Laska, jimi, ansible
Package Index Maintainer: mpdehaan, badger
DOAP record: ansible-2.0.0.2.xml
安装套件
有两种方法可以从PyPI安装软件包。 您可以下载该软件包,然后运行python setup.py install
。 但是现代的方法是使用pip , setuptools和wheel 。 Pip代表Pip Installs软件包(是的,这是首字母缩写词之一),是您安装的前端。 如果您从python.org安装了Python 2> = 2.7.9或Python 3> = 3.4,则您已经拥有pip和setuptools,但需要升级到最新版本: pip install -U pip setuptools
或python -m pip install -U pip setuptools
在Windows上python -m pip install -U pip setuptools
。
使用pip安装轮: pip install wheel
。
如果您使用的是Python的早期版本,请考虑升级。 如果无法连接,则需要自行安装pip,setuptools和wheel。 检查说明 。
Python软件包始终安装在环境中。 我这里不会介绍的一种常见做法是使用虚拟环境来管理具有不同解释器和/或不同组已安装软件包的Python的多个独立安装。
最佳实践
Python打包机构提供了有关打包最佳实践的大量指南。 这很重要,因为它是一个活跃的开发领域,建议会Swift发展。
另外,如果您想做一些特别的事情,例如从备用存储库中安装软件包而不是PyPI,或者以更复杂的方式使用pip,您会发现很好的讨论和实用建议。
结论
当您是Python初学者时,您将学习核心语言并乐在其中。 很快您就会发现标准库,并且随着您获得更多的经验,您会从其丰富性中受益越来越多。
作为Pythonista的发展的下一个阶段是将Python社区对PyPI的极大赞誉纳入您的系统。 包作为可重用Python代码的部署单元,可启用此生态系统。
翻译自: https://code.tutsplus.com/tutorials/how-to-use-python-packages--cms-26000