时间:2021-05-22
关于我
编程界的一名小程序猿,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。 联系:hylinux1024@gmail.com
当我们开发了一个开源项目时,就希望把这个项目打包然后发布到pypi.org 上,别人就可以通过pip install 的命令进行安装。本文的教程来自于Python 官方文档,如有不正确的地方欢迎评论拍砖。
0x00 创建项目
本文使用到的项目目录为
➜ 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.py0x02 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", ],)0x03 README.md
给项目添加详细的README
# Example PackageThis 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/WHEELcreating 'dist/bestpkg-0.0.1-py3-none-any.whl' and adding 'build/bdist.macosx-10.14-x86_64/wheel' to itadding '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.py8 directories, 11 files在dist 文件中有两个文件
dist ├── bestpkg-0.0.1-py3-none-any.whl └── bestpkg-0.0.1.tar.gztar.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: hylinux1024Enter your password:Uploading distributions to https://test.pypi.org/legacy/Uploading bestpkg-0.0.1-py3-none-any.whl100%|██████████████████████████████████████| 4.57k/4.57k [00:00<00:00, 8.01kB/s]Uploading bestpkg-0.0.1.tar.gz100%|██████████████████████████████████████| 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.whlInstalling collected packages: bestpkgSuccessfully installed bestpkg-0.0.1进入交互界面
(pipenvdemo) ➜ pipenvdemo python>>> import bestpkg>>> bestpkg.info'packaging demo'info 变量就是在__init__.py 文件中定义的变量。自此我们的包发布、安装使用流程就走完了。
要在正式的Python 索引库中发布,只需要到pypi.org/注册账号,并上传就可以了。
0x08 总结一下
通过一个简单的例子展示Python 通过setuptools 工具进行打包,然后上传到test.pypi.org 的流程。如果要上传到正式的pypi.org 上,只需要注册一个正式的账号。一旦发布成功就可以使用pip install [your-package] 的命令进行安装。
总结
以上所述是小编给大家介绍的Python程序包的构建和发布过程示例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一。存储过程的创建和使用1.创建程序包,并在程序中创建存储过程createorreplacePACKAGENCS_ICP_TJAS/*lfx@ncs-cyber
npm是Node.JS的程序包管理器。进行Node.JS开发时,经常使用它安装/卸载程序包。实际上,发布程序包的工作也是由它来完成的。配置package.jso
在Oracle里,视图不像存储过程和函数一样,可以定义输入参数,但我们可以变个方式,使用程序包来实现首先定义程序包:/*按个人需要定义,我定义三个参数,因我项目
手机解析程序包时出现问题了该如何是好?下面小编带来了解析程序包时出现问题解决方法,如果你在安装程序时遇到了“解析程序包时出现问题”提示,
在用maven打包时,出现过如下两个错误:错误1:程序包javax.servlet不存在,程序包javax.servlet.http不存在错误2:Nocompi