千萬別說你會Python!如果不知道這10個Python包!
世界上有超過200,000個Python程序包(這只是基于官方的Python程序包索引PyPI托管的程序包)。
這就引出了一個問題:擁有這么多的軟件包,每個Python程序員都需要學習哪些軟件包是最重要的?
為了幫助回答這個問題,下面列出了您應該熟悉的十個最重要,最有用和最普遍使用的Python程序包,因為在您從事各種項目時,它們經(jīng)常會出現(xiàn)。
此列表重點關注涵蓋多種編程場景和目標的Python軟件包,而不是僅關注特定領域,例如數(shù)據(jù)科學或Web開發(fā)。這10個里面,你用過幾個?請在評論區(qū)留言。
注:本文為英文翻譯,麥叔整理并補充了代碼示例。原文地址:https://www.activestate.com/blog/top-10-must-have-python-packages/
1. Numpy
您可以執(zhí)行基本的數(shù)學運算,而無需任何特殊的Python包。但是,如果您要進行任何復雜的數(shù)學運算,則NumPy軟件包將使您的編碼工作變得更加輕松。
NumPy提供了一些工具來幫助構建多維數(shù)組,并對存儲在其中的數(shù)據(jù)進行計算。您可以求解代數(shù)公式,執(zhí)行常見的統(tǒng)計運算等等。
>>> 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軟件包,可用于執(zhí)行各種通用編程任務,但如果您想進行機器學習,則NumPy尤為重要,因為它為TensorFlow之類的庫提供了部分基礎。
2. Pendulum
如果您至少有一點Python編程經(jīng)驗,則可能知道可以使用datetime模塊來管理應用程序中的日期和時間。
盡管datetime非常適合這些方面的基礎工作,但Pendulum Python軟件包使執(zhí)行涉及日期和時間的更復雜的編碼變得更加容易。使用起來更加直觀,并且可以自動管理時區(qū)。
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。這意味著您可以將其與已經(jīng)基于datetime編寫的代碼一起使用。除了少數(shù)幾個例外,Pendulum同樣可以工作,無需修改代碼,同時提供普通datetime所沒有的其他功能。
3. Python 圖片處理包
如果您的Python應用程序以任何方式與圖像進行交互,則Python映像庫(也稱為PIL或Pillow)是Python必需的。它使編寫以各種格式打開,修改和保存圖像的代碼變得容易。
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是您的首選解決方案。
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代表圖像。它為與導入,修改和導出視頻文件相關的常見任務提供了一系列功能。它還可以讓您執(zhí)行一些操作,例如將標題插入視頻或將視頻旋轉90度(如果出于某種原因您決定這樣做)。
像Pillow一樣,MoviePy也不能用作高級數(shù)據(jù)操作的工具。如果您正在編寫視頻編輯應用程序,則可能還需要依靠OpenCV(它可以同時處理視頻和圖像)來提供MoviePy缺少的高級功能。但是對于涉及Python代碼視頻的大多數(shù)標準任務,MoviePy可以很好地完成工作。
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
編寫發(fā)送HTTP請求的代碼可能很棘手,這在很大程度上要歸因于HTTP并未以人類易于閱讀的方式精確地格式化數(shù)據(jù)。
Requests Python程序包(座右銘:“ HTTP for Humans”)通過自動執(zhí)行許多繁瑣的任務來解決此問題,讓發(fā)送HTTP請求變得異常簡單。它消除了添加查詢字符串或執(zhí)行POST表單編碼的需要。它還可以使與HTTP服務器的連接自動保持活動狀態(tài),從而無需編寫大量代碼。
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發(fā)送任何數(shù)據(jù),則請求是必不可少的程序包。
6. Tkinter
是否要開發(fā)具有圖形用戶界面(GUI)的Python應用程序?
有很多做圖形界面的Python包(實際上,我們都可以來個Python GUI前十排行榜)。但是我認為大多數(shù)Python開發(fā)人員都會同意Tkinter是用于創(chuàng)建GUI的最重要且也是最常用的框架。它將Python綁定到TK GUI工具箱,該工具箱幾乎可在所有現(xiàn)代操作系統(tǒng)上運行。
from tkinter import *
window = Tk()
window.title("Welcome to LikeGeeks app")
window.mainloop()
除非您強烈希望使用其他GUI工具包,否則Tkinter可能是創(chuàng)建Python GUI的最佳起點。
7. PyQt
盡管前面大力推薦Tkinter,PyQT(另一個用于構建GUI的Python軟件包)也是一個有力的競爭者。它提供了到Qt工具箱的綁定(您猜對了),該工具箱也是跨平臺的。它比Tkinter用于重型GUI編程。這意味著如果您要構建具有非常簡單的界面的應用程序(例如,只有帶有一些按鈕和文本字段的窗口),使用Tkinter就對了。但如果要構建一個很復雜的桌面程序,比如開發(fā)一個QQ程序,則PyQT會更適合。

8. Pandas
有大量的Python軟件包設計用于處理復雜的數(shù)據(jù)集。但是可以說,Pandas是最重要的。Pandas可以幫助您處理和分析大量數(shù)據(jù),而無需學習專門的數(shù)據(jù)處理語言(例如R)。
Pandas有其局限性,因為它不適合用于高級統(tǒng)計建模(在這種情況下,您可能想學習R或使用statsmodels之類的Python包)。但是,如果您需要執(zhí)行諸如處理時間序列數(shù)據(jù)或對數(shù)據(jù)集進行統(tǒng)計分析之類的工作,Pandas可以為您服務。
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函數(shù)的訪問,使您可以執(zhí)行諸如與Windows注冊表進行交互,使用Windows剪貼板等操作。
如果您要構建跨平臺的Python應用程序,那么Pywin32并不能為您帶來很多好處,但是Windows開發(fā)人員可能會發(fā)現(xiàn)他們非常喜歡它,以至于使用它代替了本機Windows工具。
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開發(fā)項目,那么對新代碼執(zhí)行測試就至關重要。Pytest軟件包提供了各種模塊來幫助您完成此任務。無論是簡單的單元測試還是更復雜的功能測試,Pytest都可以幫助您編寫它。
# 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生態(tài)系統(tǒng)已經(jīng)生成了許多有價值的軟件包,以至于即使在前100名列表中,也不可能包括所有重要軟件包,更不用說前10名列表了。但是,對于通用Python編程,上述軟件包基本是必備。
—————END—————
