: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

如何打包你的 Python 代码(ZT)

如何打包你的 Python 代码(ZT)

你花了几周的时间来完善你的代码。你已经对它进行了测试,并把它发送给一些亲近的开发者朋友以保证质量。你已经将所有的源代码发布在 你的个人 Git 服务器 上,并且从一些勇敢的早期使用者收到了一些有用的错误报告。现在你已经准备好将你的 Python 代码提供给全世界。

就在这时你遇到一个问题。你不知道如何交付产品。

将代码交付给它的目标用户是一件大事。这是软件开发的一个完整的分支,是 CI/CD 中的 “D”,但很多人都忘记了,至少到最后才知道。我写过关于 Autotools 和 Cmake 的文章,但有些语言有自己的方法来帮助你将你的代码提供给用户。对于 Python 来说,向用户提供代码的一个常见方法是使用 setuptools。

安装 setuptools

安装和更新 setuptools 的最简单方法是使用 pip:
  1. $ sudo python -m pip install --upgrade setuptools
复制代码
示例库

我创建了一个简单的 Python 库,名为 myhellolib,来作为需要打包的示例代码。这个库接受一个字符串,然后用大写字母打印出这个字符串。

它只有两行代码,但项目结构很重要,所以首先创建目录树:
  1. $ mkdir -p myhellolib.git/myhellolib
复制代码
为了确认这个项目是一个可导入的库(即 Python “模块”),在代码目录中创建一个空文件 __init__.py,同时创建一个包含代码的文件:
  1. $ touch myhellolib.git/myhellolib/__init__.py
  2. $ touch myhellolib.git/myhellolib/myhellolib.py
复制代码
在 myhellolib.py 文件中,输入简单的 Python 代码:
  1. def greeter(s):
  2.     print(s.upper())
复制代码
这就是写好的库。

测试它

在打包之前,测试一下你的库。创建一个 myhellolib.git/test.py 文件并输入以下代码:
  1. import myhellolib.myhellolib as hello
  2. hello.greeter("Hello Opensource.com.")
复制代码
运行该脚本:
  1. $ cd myhellolib.git
  2. $ python ./test.py
  3. HELLO OPENSOURCE.COM
复制代码
它可以工作,所以现在你可以把它打包了。

Setuptools

要用 setuptools 打包一个项目,你必须创建一个 .toml 文件,将 setuptools 作为构建系统。将这段文字放在项目目录下的 myhellolib.toml 文件中。
  1. [build-system]
  2. requires = ["setuptools", "wheel"]
  3. build-backend = "setuptools.build_meta"
复制代码
接下来,创建一个名为 setup.py 的文件,包含项目的元数据:
  1. from setuptools import setup

  2. setup(
  3.    name='myhellolib',
  4.    version='0.0.1',
  5.    packages=['myhellolib'],
  6.    install_requires=[
  7.       'requests',
  8.       'importlib; python_version == "3.8"',
  9.    ],
  10. )
复制代码
不管你信不信,这就是 setuptools 需要的所有设置。你的项目已经可以进行打包。

打包 Python

要创建你的 Python 包,你需要一个构建器。一个常见的工具是 build,你可以用 pip 安装它:
  1. $ python -m pip install build --user
复制代码
构建你的项目:
  1. $ python -m build
复制代码
过了一会儿,构建完成了,在你的项目文件夹中出现了一个新的目录,叫做 dist。这个文件夹包含一个 .tar.gz 和一个 .whl 文件。

这是你的第一个 Python 包! 下面是包的内容:
  1. $ tar --list --file dist/myhellolib-0.0.1.tar.gz
  2. myhellolib-0.0.1/
  3. myhellolib-0.0.1/PKG-INFO
  4. myhellolib-0.0.1/myhellolib/
  5. myhellolib-0.0.1/myhellolib/__init__.py
  6. myhellolib-0.0.1/myhellolib/myhellolib.py
  7. myhellolib-0.0.1/myhellolib.egg-info/
  8. myhellolib-0.0.1/myhellolib.egg-info/PKG-INFO
  9. myhellolib-0.0.1/myhellolib.egg-info/SOURCES.txt
  10. myhellolib-0.0.1/myhellolib.egg-info/dependency_links.txt
  11. myhellolib-0.0.1/myhellolib.egg-info/requires.txt
  12. myhellolib-0.0.1/myhellolib.egg-info/top_level.txt
  13. myhellolib-0.0.1/setup.cfg
  14. myhellolib-0.0.1/setup.py

  15. $ unzip -l dist/myhellolib-0.0.1-py3-none-any.whl
  16. Archive:  dist/myhellolib-0.0.1-py3-none-any.whl
  17. Name
  18. ----
  19. myhellolib/__init__.py
  20. myhellolib/myhellolib.py
  21. myhellolib-0.0.1.dist-info/METADATA
  22. myhellolib-0.0.1.dist-info/WHEEL
  23. myhellolib-0.0.1.dist-info/top_level.txt
  24. myhellolib-0.0.1.dist-info/RECORD
  25. -------
  26. 6 files
复制代码
让它可用

现在你知道了打包你的 Python 包是多么容易,你可以使用 Git 钩子、GitLab Web 钩子、Jenkins 或类似的自动化工具来自动完成这个过程。你甚至可以把你的项目上传到 PyPi,这个流行的 Python 模块仓库。一旦它在 PyPi 上,用户就可以用 pip 来安装它,就像你在这篇文章中安装 setuptools 和 build 一样!

当你坐下来开发一个应用或库时,打包并不是你首先想到的事情,但它是编程的一个重要方面。Python 开发者在程序员如何向世界提供他们的工作方面花了很多心思,没有比 setuptools 更容易的了。试用它,使用它,并继续用 Python 编码!

原址:https://zhuanlan.zhihu.com/p/434465197

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表