您好,登录后才能下订单哦!
本篇文章给大家分享的是有关怎么在Python中构建程序包,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均为Python开发。3.人工智能应用,基于大数据分析和深度学习而发展出来的人工智能本质上已经无法离开python。4、系统运维工程项目,自动化运维的标配就是python+Django/flask。5、金融理财分析,量化交易,金融分析。6、大数据分析。
本文使用到的项目目录为
➜ packaging-tutorial . └── bestpkg └── __init__.py
接下来的所有操作都是在 packing_tutorial 这个目录下进行的。首先把 bestpkg 这个目录下的 __init__.py 添加以下内容
info='packaging demo'
这个信息主要用于打包成功后安装测试用的。
0x01 项目结构
一个待发布的项目还需要有以下这些文件: setup.py 、 LICENSE 和 README.md
➜ packaging-tutorial . ├── LICENSE ├── README.md ├── bestpkg │ └── __init__.py └── setup.py
0x02 setup.py
setup.py 文件是给 setuptools 工具的使用脚本,告诉 setuptools 如何构建我们的项目。打开编辑器,编辑 setup.py 文件,输入以下内容
import setuptools # 读取项目的readme介绍 with open("README.md", "r") as fh: long_description = fh.read() setuptools.setup( name="bestpkg",# 项目名称,保证它的唯一性,不要跟已存在的包名冲突即可 version="0.0.1", author="hylinux1024", # 项目作者 author_email="hylinux1024@gmail.com", description="一个牛逼的程序", # 项目的一句话描述 long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/hylinux1024/niubiproject",# 项目地址 packages=setuptools.find_packages(), classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], )
name
项目名称,保证它的唯一性,不要跟已存在的包名冲突即可,否则会发布失败
version
版本号
author
作者
author_email
作者邮箱
description
一句话描述项目
long_description
项目详细说明,一般直接读取README.md的内容
url
项目的链接地址
packages
列出当前项目的包,一般直接使用 find_packages() 即可
classifiers
这里指定 Python 的兼容版本是 Python3 ,也指定了项目使用的开源协议。
0x03 README.md
给项目添加详细的 README
# Example Package This is a simple example package. You can use [Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/) to write your content.
0x04 LICENSE
要发布包到 pypi 上,选择一个合适的开源协议是非常重要的。如果不知道怎么选可以到choosealicense.com/这里看看。
0x05 项目打包
项目需要打包后才能发布,要打包项目需先安装最新版本的 setuptools 和 wheel
➜ python3 -m pip install --user --upgrade setuptools wheel
然后使用以下命令进行打包
➜ python3 setup.py sdist bdist_wheel
当看到以下信息,说明已经打包成功
... ... ... adding license file "LICENSE" (matched pattern "LICEN[CS]E*") creating build/bdist.macosx-10.14-x86_64/wheel/bestpkg-0.0.1.dist-info/WHEEL creating 'dist/bestpkg-0.0.1-py3-none-any.whl' and adding 'build/bdist.macosx-10.14-x86_64/wheel' to it adding 'bestpkg/__init__.py' adding 'bestpkg-0.0.1.dist-info/LICENSE' adding 'bestpkg-0.0.1.dist-info/METADATA' adding 'bestpkg-0.0.1.dist-info/WHEEL' adding 'bestpkg-0.0.1.dist-info/top_level.txt' adding 'bestpkg-0.0.1.dist-info/RECORD' removing build/bdist.macosx-10.14-x86_64/wheel
在项目目录下会生成一个 dist 和 build 文件夹
➜ packaging-tutorial tree . ├── LICENSE ├── README.md ├── bestpkg │ └── __init__.py ├── bestpkg.egg-info │ ├── PKG-INFO │ ├── SOURCES.txt │ ├── dependency_links.txt │ └── top_level.txt ├── build │ ├── bdist.macosx-10.14-x86_64 │ ├── bdist.macosx-10.9-x86_64 │ └── lib │ └── bestpkg │ └── __init__.py ├── dist │ ├── bestpkg-0.0.1-py3-none-any.whl │ └── bestpkg-0.0.1.tar.gz └── setup.py 8 directories, 11 files
在 dist 文件中有两个文件
dist ├── bestpkg-0.0.1-py3-none-any.whl └── bestpkg-0.0.1.tar.gz
tar.gz 文件是源码文件压缩包,而 .whl 就是打包后的文件。最新的 pip 命令会安装这个 .whl 文件。
0x06 上传
现在就可以上传到 Python 索引库了。我们使用 Test PyPI ,这个是测试用的 Pypi ,本例子也是使用 Test Pypi 。
首先要到 test.pypi.org/account/reg… 注册账号。本例中我注册的账号为: hylinux1024 。
然后使用 twine 工具来上传我们的包。使用以下命令进行安装:
➜ python3 -m pip install --user --upgrade twine
使用以下命令上传 dist 目录下的文件
➜ python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
这个命令会提示输入刚在 test.pypi.org 上注册账号密码,并出现类似以下信息后说明已经上传成功。
Enter your username: hylinux1024 Enter your password: Uploading distributions to https://test.pypi.org/legacy/ Uploading bestpkg-0.0.1-py3-none-any.whl 100%|██████████████████████████████████████| 4.57k/4.57k [00:00<00:00, 8.01kB/s] Uploading bestpkg-0.0.1.tar.gz 100%|██████████████████████████████████████| 4.18k/4.18k [00:01<00:00, 3.23kB/s]
然后打开 test.pypi.org/project/bes… 这个地址就可以看到我们发布的包。
0x07 安装
发布成功之后就可以使用 pip 来安装来。我们在虚拟环境中安装,关于虚拟环境可以看我前一篇文章。
这里就使用 pipenv ,这里我直接进入到我昨天创建的那个项目中,也为了更好演示安装结果。
➜ pip install --index-url https://test.pypi.org/simple/ --no-deps bestpkg
在这里我使用 --index-url 参数是为了指定从 test.pypi.org 中安装,而不是正式包索引库中查找要安装的包。还有使用了 --no-deps 参数是因为本例中没有使用到其它的依赖库。
在终端会看到以下类似信息,说明安装成功
Looking in indexes: https://test.pypi.org/simple/ Collecting bestpkg Downloading https://test-files.pythonhosted.org/packages/5a/fc/c109b3872b6c06e7368c30b6e52501113846f90ca716a434766151093173/bestpkg-0.0.1-py3-none-any.whl Installing collected packages: bestpkg Successfully installed bestpkg-0.0.1
进入交互界面
(pipenvdemo) ➜ pipenvdemo python >>> import bestpkg >>> bestpkg.info 'packaging demo'
info 变量就是在 __init__.py 文件中定义的变量。自此我们的包发布、安装使用流程就走完了。
要在正式的 Python 索引库中发布,只需要到pypi.org/注册账号,并上传就可以了。
以上就是怎么在Python中构建程序包,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。