关于我
编程界的一名小程序猿,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是咱们团队的主要技术栈。 联系:hylinux1024@gmail.compython
当咱们开发了一个开源项目时,就但愿把这个项目打包而后发布到pypi.org
上,别人就能够经过pip install
的命令进行安装。本文的教程来自于Python
官方文档,若有不正确的地方欢迎评论拍砖。linux
本文使用到的项目目录为git
➜ packaging-tutorial
.
└── bestpkg
└── __init__.py
复制代码
接下来的全部操做都是在packing_tutorial
这个目录下进行的。首先把bestpkg
这个目录下的__init__.py
添加如下内容github
info='packaging demo'
复制代码
这个信息主要用于打包成功后安装测试用的。macos
一个待发布的项目还须要有如下这些文件:setup.py
、LICENSE
和README.md
编程
➜ packaging-tutorial
.
├── LICENSE
├── README.md
├── bestpkg
│ └── __init__.py
└── 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",
],
)
复制代码
find_packages()
便可Python
的兼容版本是Python3
,也指定了项目使用的开源协议。给项目添加详细的README
bash
# 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.
复制代码
要发布包到pypi
上,选择一个合适的开源协议是很是重要的。若是不知道怎么选能够到choosealicense.com/这里看看。markdown
项目须要打包后才能发布,要打包项目需先安装最新版本的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
文件。
如今就能够上传到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…这个地址就能够看到咱们发布的包。
发布成功以后就可使用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
经过setuptools
工具进行打包,而后上传到test.pypi.org
的流程。若是要上传到正式的pypi.org
上,只须要注册一个正式的帐号。一旦发布成功就可使用pip install [your-package]
的命令进行安装。