Linux中國

如何打包你的 Python 代碼

你花了幾周的時間來完善你的代碼。你已經對它進行了測試,並把它發送給一些親近的開發者朋友以保證質量。你已經將所有的源代碼發布在 你的個人 Git 伺服器 上,並且從一些勇敢的早期使用者收到了一些有用的錯誤報告。現在你已經準備好將你的 Python 代碼提供給全世界。

就在這時你遇到一個問題。你不知道如何交付產品。

將代碼交付給它的目標用戶是一件大事。這是軟體開發的一個完整的分支,是 CI/CD 中的 「D」,但很多人都忘記了,至少到最後才知道。我寫過關於 AutotoolsCmake 的文章,但有些語言有自己的方法來幫助你將你的代碼提供給用戶。對於 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 來安裝它,就像你在這篇文章中安裝 setuptoolsbuild 一樣!

當你坐下來開發一個應用或庫時,打包並不是你首先想到的事情,但它是編程的一個重要方面。Python 開發者在程序員如何向世界提供他們的工作方面花了很多心思,沒有比 setuptools 更容易的了。試用它,使用它,並繼續用 Python 編碼!

via: https://opensource.com/article/21/11/packaging-python-setuptools

作者:Seth Kenlon 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國