| 会员登录 立即注册

打印 上一主题 下一主题

如何打包你的 Python 代码

[复制链接]
跳转到指定楼层
楼主
3AAA 发表于 2021-11-20 11:35:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
楼主
3AAA
2021-11-20 11:35:14 4041 1 看楼主

使用 setuptools 来向用户交付 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 hellohello.greeter("Hello Opensource.com.")
运行该脚本:
$ cd myhellolib.git$ python ./test.pyHELLO OPENSOURCE.COM
它可以工作,所以现在你可以把它打包了。

Setuptools


要用 setuptools打包一个项目,你必须创建一个.toml文件,将setuptools作为构建系统。将这段文字放在项目目录下的myhellolib.toml文件中。
[build-system]requires = ["setuptools", "wheel"]build-backend = "setuptools.build_meta"
接下来,创建一个名为 setup.py的文件,包含项目的元数据:
from setuptools import setupsetup(   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.gzmyhellolib-0.0.1/myhellolib-0.0.1/PKG-INFOmyhellolib-0.0.1/myhellolib/myhellolib-0.0.1/myhellolib/__init__.pymyhellolib-0.0.1/myhellolib/myhellolib.pymyhellolib-0.0.1/myhellolib.egg-info/myhellolib-0.0.1/myhellolib.egg-info/PKG-INFOmyhellolib-0.0.1/myhellolib.egg-info/SOURCES.txtmyhellolib-0.0.1/myhellolib.egg-info/dependency_links.txtmyhellolib-0.0.1/myhellolib.egg-info/requires.txtmyhellolib-0.0.1/myhellolib.egg-info/top_level.txtmyhellolib-0.0.1/setup.cfgmyhellolib-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.whlName----myhellolib/__init__.pymyhellolib/myhellolib.pymyhellolib-0.0.1.dist-info/METADATAmyhellolib-0.0.1.dist-info/WHEELmyhellolib-0.0.1.dist-info/top_level.txtmyhellolib-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

本文由 LCTT原创编译,Linux中国荣誉推出
回复

使用道具 举报

沙发
anderside 发表于 2021-11-20 11:36:45 | 只看该作者
沙发
anderside
2021-11-20 11:36:45 看楼主
转发了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

3AAA 当前离线
白银会员

查看:4041 | 回复:1

关于我们  |   侵权投诉受理  |   联系我们  |   Archiver  |  
免责声明:邳州信息网所有言论只代表发表者个人观点,与本站无关
Copyright © 2009-2025 pzxxw.com 版权所有:邳州金银杏文化传媒有限公司  

苏公网安备 32038202000401号

快速回复 返回顶部 返回列表