你花了几周的时间来完善你的代码。你已经对它进行了测试,并把它发送给一些亲近的开发者朋友以保证质量。你已经将所有的源代码发布在 你的个人 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 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.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 编码!

觉得对你们有用的话记得点赞、关注、转发哦~

如何打包你的 Python 代码相关推荐

  1. python代码写完怎么运行-Python 项目代码写完了,然后怎么打包和发布?

    你把你的代码写完了,是不是要给别人使用下,怎么打包你的项目代码呢? 喂,开源么? 接下来小帅b就跟你说说,如何打包你的代码. 就拿我们上次演示的 用 Python 开发一个 「个人计划 todolis ...

  2. python怎么封装方法然后调用_Python实现封装打包自己写的代码,被python import

    1.新建一个文件夹example,里面放入要打包的.py文件,以及必需的_init_.py. 代码如下: # -*- coding: utf-8 -*- """ Crea ...

  3. Python代码打包成exe文件

    Python代码打包成exe文件:     安装pyinstaller     打包文件:cmd到文件目录下, 执行 pyinstaller -F test.py 注意:如果有调用的文件或配置文件,打 ...

  4. python 打包发布网站_Python代码的打包与发布

    这篇文章主要介绍了Python代码的打包与发布的方法,需要的朋友可以参考下 在python程序中,一个.py文件被当作一个模块,在各个模块中定义了不同的函数.当我们要使用某一个模块中的某一个函数时,首 ...

  5. python打包和添加数据文件_Python打包时添加非代码文件的坑

    Title: Python打包时添加非代码文件的坑 Tags: python, 小结 对于 Python 的打包, 通常有两种, 一种是对源文件打包, 一种是安装包, 既在上传 pypi 的时候一般会 ...

  6. 将Python代码打包成Windows 10的可执行文件

    将Python代码打包成可执行文件 1.安装pyinstaller包 pycharm->terminal输入: pip install pyinstaller==4.1 -i https://p ...

  7. 【转载】用cx_Freeze把Python代码打包成单个独立的exe可执行文件

    链接:用cx_Freeze把Python代码打包成单个独立的exe可执行文件 [记录]用cx_Freeze把Python代码打包成单个独立的exe可执行文件 背景 之前已经折腾过: [记录]用PyIn ...

  8. 【Python】Python代码在64位电脑上打包发布32位exe程序的一种方法(使用PyCharm)

    1. 背景 现在的电脑大多都是64位的,开发者安装的 Python 也多是64位的,所以使用 pyinstaller打包出的exe也是64位的. 有时候用户的电脑是古老的windows7 32位系统, ...

  9. Python代码部署的三种加密方案:代码混淆、代码编译、代码打包

    前言 最近需要源码部署一个项目,因此探索一下保护源码的方式,由简单到复杂主要总结为以下三大类: 代码混淆:主要是改变一些函数名.变量名 代码打包:思路是把Python代码打包成 .exe 的可执行文件 ...

最新文章

  1. [转载] Tmux 速成教程:技巧和调整
  2. 公开课:如何成为一名高级系统运维工程师(架构师)?
  3. git——从远程库克隆
  4. 互联网协议 — TCP — 滑动窗口(网络质量保障)
  5. 北京通州拟3年培训技能人才5万人次 服务城市副中心行政办公区等
  6. 微博上的网红,为什么更能红得发紫?
  7. arm-linux-gcc /lib/libc.so.6,链接器 – 找不到/lib/libc.so.6
  8. 在计算机应用领域中媒体是指,在计算机中,媒体是指什么
  9. Eclipse-cdt 配合 gdbserver 进行 arm 程序远程调试 上
  10. QQ帐户的申请与登陆 (25 分)(map映射)
  11. Atitit.论图片类型 垃圾文件的识别与清理  流程与设计原则 与api概要设计 v2 pbj
  12. 数据结构与算法训练:第十八弹
  13. 光盘中的vob格式怎么转换成mp4格式
  14. 深入理解Amazon Alexa Skill(一)
  15. P1931 套利-SPFA最长路与环的判断
  16. 安卓应用 - 公开市场上传投放
  17. 《时间的秩序》-- 卡洛.罗韦利
  18. 蓝牙路由器蓝牙点对多点组网蓝牙远程控制
  19. 通过ua区分QQ内置浏览器与QQ浏览器
  20. java三种循环的流程图画法总结(for,while,do-while循环)

热门文章

  1. 关于钢材流通行业信息化的建议
  2. linux中的grep 过滤查找及“|”管道符、gzip/gunzip 压缩、zip/unzip 压缩
  3. MTK Android 11.0:充电低电指示灯会被未读消息信号灯灭掉,无优先级控制。
  4. A Lightweight and Accurate Recognition Framework for Signs of X-ray Weld Images
  5. VS+MYSQL考试管理系统(白piao速成版)
  6. c语言典型编程题北理,c++经典编程题
  7. HDU 1252 : Hike on a Graph-
  8. react学习笔记(完整版 7万字超详细)
  9. oracle r12 税,Oracle EBS R12 总账和子分类帐关系详解
  10. Unity动画系统常用知识总结