世界上有超过200,000个Python程序包(这只是基于官方的Python程序包索引PyPI托管的程序包)。
这就引出了一个问题:拥有这么多的软件包,每个Python程序员都需要学习哪些软件包是最重要的?
为了帮助回答这个问题,下面列出了您应该熟悉的十个最重要,最有用和最普遍使用的Python程序包,因为在您从事各种项目时,它们经常会出现。
此列表重点关注涵盖多种编程场景和目标的Python软件包,而不是仅关注特定领域,例如数据科学或Web开发。这10个里面,你用过几个?请在评论区留言。
注:本文为英文翻译,整理并补充了代码示例。原文地址:https://www.activestate.com/blog/top-10-must-have-python-packages/
1. Numpy
您可以执行基本的数学运算,而无需任何特殊的Python包。但是,如果您要进行任何复杂的数学运算,则NumPy软件包将使您的编码工作变得更加轻松。
NumPy提供了一些工具来帮助构建多维数组,并对存储在其中的数据进行计算。您可以求解代数公式,执行常见的统计运算等等。
代码语言:javascript复制>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<class 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<class 'numpy.ndarray'>
尽管NumPy是一个有价值的Python软件包,可用于执行各种通用编程任务,但如果您想进行机器学习,则NumPy尤为重要,因为它为TensorFlow之类的库提供了部分基础。
2. Pendulum
如果您至少有一点Python编程经验,则可能知道可以使用datetime模块来管理应用程序中的日期和时间。
尽管datetime非常适合这些方面的基础工作,但Pendulum Python软件包使执行涉及日期和时间的更复杂的编码变得更加容易。使用起来更加直观,并且可以自动管理时区。
代码语言:javascript复制import pendulum
now = pendulum.now("Europe/Paris")
# Changing timezone
now.in_timezone("America/Toronto")
# Default support for common datetime formats
now.to_iso8601_string()
# Shifting
now.add(days=2)
最棒的是,Pendulum旨在替代datetime。这意味着您可以将其与已经基于datetime编写的代码一起使用。除了少数几个例外,Pendulum同样可以工作,无需修改代码,同时提供普通datetime所没有的其他功能。
3. Python 图片处理包
如果您的Python应用程序以任何方式与图像进行交互,则Python映像库(也称为PIL或Pillow)是Python必需的。它使编写以各种格式打开,修改和保存图像的代码变得容易。
代码语言:javascript复制from PIL import Image
#Open image using Image module
im = Image.open("images/cuba.jpg")
#Show actual Image
im.show()
#Show rotated Image
im = im.rotate(45)
im.show()
如果您要对图像进行更高级的处理(例如图像识别,在这种情况下,OpenCV将是一个不错的选择),Pillow不会自行裁切的。但是对于基本的图像导入,处理和导出,Pillow是您的首选解决方案。
代码语言:javascript复制import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread("C://gfg//tomatoes.jpg", 1)
# Loading the image
half = cv2.resize(image, (0, 0), fx = 0.1, fy = 0.1)
bigger = cv2.resize(image, (1050, 1610))
stretch_near = cv2.resize(image, (780, 540),
interpolation = cv2.INTER_NEAREST)
Titles =["Original", "Half", "Bigger", "Interpolation Nearest"]
images =[image, half, bigger, stretch_near]
count = 4
for i in range(count):
plt.subplot(2, 2, i 1)
plt.title(Titles[i])
plt.imshow(images[i])
plt.show()
4. MoviePy
MoviePy代表视频,Pillow代表图像。它为与导入,修改和导出视频文件相关的常见任务提供了一系列功能。它还可以让您执行一些操作,例如将标题插入视频或将视频旋转90度(如果出于某种原因您决定这样做)。
像Pillow一样,MoviePy也不能用作高级数据操作的工具。如果您正在编写视频编辑应用程序,则可能还需要依靠OpenCV(它可以同时处理视频和图像)来提供MoviePy缺少的高级功能。但是对于涉及Python代码视频的大多数标准任务,MoviePy可以很好地完成工作。
代码语言:javascript复制from skimage.filters import gaussian_filter
from moviepy.editor import VideoFileClip
def blur(image):
""" Returns a blurred (radius=2 pixels) version of the image """
return gaussian_filter(image.astype(float), sigma=2)
clip = VideoFileClip("my_video.mp4")
clip_blurred = clip.fl_image( blur )
clip_blurred.write_videofile("blurred_video.mp4")
5. requests
编写发送HTTP请求的代码可能很棘手,这在很大程度上要归因于HTTP并未以人类易于阅读的方式精确地格式化数据。
Requests Python程序包(座右铭:“ HTTP for Humans”)通过自动执行许多繁琐的任务来解决此问题,让发送HTTP请求变得异常简单。它消除了添加查询字符串或执行POST表单编码的需要。它还可以使与HTTP服务器的连接自动保持活动状态,从而无需编写大量代码。
代码语言:javascript复制import requests
from requests.exceptions import HTTPError
for url in ['https://api.github.com', 'https://api.github.com/invalid']:
try:
response = requests.get(url)
# If the response was successful, no Exception will be raised
response.raise_for_status()
except HTTPError as http_err:
print(f'HTTP error occurred: {http_err}') # Python 3.6
except Exception as err:
print(f'Other error occurred: {err}') # Python 3.6
else:
print('Success!')
简而言之,如果您的应用程序通过HTTP发送任何数据,则请求是必不可少的程序包。
6. Tkinter
是否要开发具有图形用户界面(GUI)的Python应用程序?
有很多做图形界面的Python包(实际上,我们都可以来个Python GUI前十排行榜)。但是我认为大多数Python开发人员都会同意Tkinter是用于创建GUI的最重要且也是最常用的框架。它将Python绑定到TK GUI工具箱,该工具箱几乎可在所有现代操作系统上运行。
代码语言:javascript复制from tkinter import *
window = Tk()
window.title("Welcome to LikeGeeks app")
window.mainloop()
除非您强烈希望使用其他GUI工具包,否则Tkinter可能是创建Python GUI的最佳起点。
7. PyQt
尽管前面大力推荐Tkinter,PyQT(另一个用于构建GUI的Python软件包)也是一个有力的竞争者。它提供了到Qt工具箱的绑定(您猜对了),该工具箱也是跨平台的。它比Tkinter用于重型GUI编程。这意味着如果您要构建具有非常简单的界面的应用程序(例如,只有带有一些按钮和文本字段的窗口),使用Tkinter就对了。但如果要构建一个很复杂的桌面程序,比如开发一个QQ程序,则PyQT会更适合。
Qt Designer Python
8. Pandas
有大量的Python软件包设计用于处理复杂的数据集。但是可以说,Pandas是最重要的。Pandas可以帮助您处理和分析大量数据,而无需学习专门的数据处理语言(例如R)。
Pandas有其局限性,因为它不适合用于高级统计建模(在这种情况下,您可能想学习R或使用statsmodels之类的Python包)。但是,如果您需要执行诸如处理时间序列数据或对数据集进行统计分析之类的工作,Pandas可以为您服务。
代码语言:javascript复制In [5]: dates = pd.date_range("20130101", periods=6)
In [6]: dates
Out[6]:
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
'2013-01-05', '2013-01-06'],
dtype='datetime64[ns]', freq='D')
In [7]: df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list("ABCD"))
In [8]: df
Out[8]:
A B C D
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
2013-01-05 -0.424972 0.567020 0.276232 -1.087401
2013-01-06 -0.673690 0.113648 -1.478427 0.524988
9. Pywin32
特别是对于Windows Python编程,Pywin32是必备软件包。它提供对许多本机Windows API函数的访问,使您可以执行诸如与Windows注册表进行交互,使用Windows剪贴板等操作。
如果您要构建跨平台的Python应用程序,那么Pywin32并不能为您带来很多好处,但是Windows开发人员可能会发现他们非常喜欢它,以至于使用它代替了本机Windows工具。
代码语言:javascript复制import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
_ = input("Press ENTER to quit:")
excel.Application.Quit()
10. Pytest
如果您有一个复杂的Python开发项目,那么对新代码执行测试就至关重要。Pytest软件包提供了各种模块来帮助您完成此任务。无论是简单的单元测试还是更复杂的功能测试,Pytest都可以帮助您编写它。
代码语言:javascript复制# test_capitalize.py
import pytest
def test_capital_case():
assert capital_case('semaphore') == 'Semaphore'
def test_raises_exception_on_non_string_arguments():
with pytest.raises(TypeError):
capital_case(9)
如果您最喜欢的Python库或框架未在前十个必备Python软件包中列出此列表,请不要冒犯。Python生态系统已经生成了许多有价值的软件包,以至于即使在前100名列表中,也不可能包括所有重要软件包,更不用说前10名列表了。但是,对于通用Python编程,上述软件包基本是必备。