如何打包你的 Python 代碼
你花了幾周的時間來完善你的代碼。你已經對它進行了測試,並把它發送給一些親近的開發者朋友以保證質量。你已經將所有的源代碼發布在 你的個人 Git 伺服器 上,並且從一些勇敢的早期使用者收到了一些有用的錯誤報告。現在你已經準備好將你的 Python 代碼提供給全世界。
就在這時你遇到一個問題。你不知道如何交付產品。
將代碼交付給它的目標用戶是一件大事。這是軟體開發的一個完整的分支,是 CI/CD 中的 「D」,但很多人都忘記了,至少到最後才知道。我寫過關於 Autotools 和 Cmake 的文章,但有些語言有自己的方法來幫助你將你的代碼提供給用戶。對於 Python 來說,向用戶提供代碼的一個常見方法是使用 setuptools
。
安裝 setuptools
安裝和更新 setuptools
的最簡單方法是使用 pip
:
$ sudo python -m pip install --upgrade setuptools
示例庫
我創建了一個簡單的 Python 庫,名為 myhellolib
,來作為需要打包的示例代碼。這個庫接受一個字元串,然後用大寫字母列印出這個字元串。
它只有兩行代碼,但項目結構很重要,所以首先創建目錄樹:
$ mkdir -p myhellolib.git/myhellolib
為了確認這個項目是一個可導入的庫(即 Python 「模塊」),在代碼目錄中創建一個空文件 __init__.py
,同時創建一個包含代碼的文件:
$ touch myhellolib.git/myhellolib/__init__.py
$ touch myhellolib.git/myhellolib/myhellolib.py
在 myhellolib.py
文件中,輸入簡單的 Python 代碼:
def greeter(s):
print(s.upper())
這就是寫好的庫。
測試它
在打包之前,測試一下你的庫。創建一個 myhellolib.git/test.py
文件並輸入以下代碼:
import myhellolib.myhellolib as hello
hello.greeter("Hello Opensource.com.")
運行該腳本:
$ cd myhellolib.git
$ python ./test.py
HELLO OPENSOURCE.COM
它可以工作,所以現在你可以把它打包了。
Setuptools
要用 setuptools
打包一個項目,你必須創建一個 .toml
文件,將 setuptools
作為構建系統。將這段文字放在項目目錄下的 myhellolib.toml
文件中。
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
接下來,創建一個名為 setup.py
的文件,包含項目的元數據:
from setuptools import setup
setup(
name='myhellolib',
version='0.0.1',
packages=['myhellolib'],
install_requires=[
'requests',
'importlib; python_version == "3.8"',
],
)
不管你信不信,這就是 setuptools
需要的所有設置。你的項目已經可以進行打包。
打包 Python
要創建你的 Python 包,你需要一個構建器。一個常見的工具是 build
,你可以用 pip
安裝它:
$ python -m pip install build --user
構建你的項目:
$ python -m build
過了一會兒,構建完成了,在你的項目文件夾中出現了一個新的目錄,叫做 dist
。這個文件夾包含一個 .tar.gz
和一個 .whl
文件。
這是你的第一個 Python 包! 下面是包的內容:
$ tar --list --file dist/myhellolib-0.0.1.tar.gz
myhellolib-0.0.1/
myhellolib-0.0.1/PKG-INFO
myhellolib-0.0.1/myhellolib/
myhellolib-0.0.1/myhellolib/__init__.py
myhellolib-0.0.1/myhellolib/myhellolib.py
myhellolib-0.0.1/myhellolib.egg-info/
myhellolib-0.0.1/myhellolib.egg-info/PKG-INFO
myhellolib-0.0.1/myhellolib.egg-info/SOURCES.txt
myhellolib-0.0.1/myhellolib.egg-info/dependency_links.txt
myhellolib-0.0.1/myhellolib.egg-info/requires.txt
myhellolib-0.0.1/myhellolib.egg-info/top_level.txt
myhellolib-0.0.1/setup.cfg
myhellolib-0.0.1/setup.py
$ unzip -l dist/myhellolib-0.0.1-py3-none-any.whl
Archive: dist/myhellolib-0.0.1-py3-none-any.whl
Name
-myhellolib/__init__.py
myhellolib/myhellolib.py
myhellolib-0.0.1.dist-info/METADATA
myhellolib-0.0.1.dist-info/WHEEL
myhellolib-0.0.1.dist-info/top_level.txt
myhellolib-0.0.1.dist-info/RECORD
----6 files
讓它可用
現在你知道了打包你的 Python 包是多麼容易,你可以使用 Git 鉤子、GitLab Web 鉤子、Jenkins 或類似的自動化工具來自動完成這個過程。你甚至可以把你的項目上傳到 PyPi,這個流行的 Python 模塊倉庫。一旦它在 PyPi 上,用戶就可以用 pip
來安裝它,就像你在這篇文章中安裝 setuptools
和 build
一樣!
當你坐下來開發一個應用或庫時,打包並不是你首先想到的事情,但它是編程的一個重要方面。Python 開發者在程序員如何向世界提供他們的工作方面花了很多心思,沒有比 setuptools
更容易的了。試用它,使用它,並繼續用 Python 編碼!
via: https://opensource.com/article/21/11/packaging-python-setuptools
作者:Seth Kenlon 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive