使用pip安装自己的程序——上传python程序到PyPi
0. 前言
昨天无聊写了一个小游戏,然后突然想到要是能使用 pip
安装不就很棒(可以更好的跟女朋友炫耀)。然后网上找了一下资料,发现还真可以,还挺容易的。
接下来就以我写的小游戏为例,做一个示范。
1. 注册账号
点此注册:Register Pypi
2. 安装 setuotools, wheel, twine
setuotools
和 wheel
用来构建你的项目,一般都会随 Python 安装,但是还是检查一下:
python -m pip install --user --upgrade setuptools wheel
twine
用来上传你的包到 PyPi :
python -m pip install --user --upgrade twine
3. 添加文件
3.1 目录结构
我写的小游戏比较小巧,只有一个文件 life.py
,但是 python 包需要一个 __init__.py
文件,由于我想直接运行包,所以加了一个 __main__.py
文件,但是这个文件非必需。所以,目录结构如下:
life_game\
|---- __init__.py
|---- __main__.py
|---- life.py
接下来添加一些发布的必要文件,在上面的文件夹外层再创建一个文件夹,名字随意,我习惯使用一样的。如下:
life_game\
|---- setup.py
|---- LICENSE
|---- README.md
|---- life_game\
|---- __init__.py
|---- __main__.py
|---- life.py
3.2 setup.py
setup.py
是setuptools的构建脚本。它告诉setuptools你的包(例如名称和版本)以及要包含的代码文件。
我的 setup.py 如下:
#!/usr/bin/env python
from __future__ import print_function
from setuptools import setup, find_packages
import sys
setup(
name="life_game",
version="1.2.0",
author="Memory",
author_email="[email protected]",
description="life game",
long_description="life game written by pygame",
license="MIT",
url="https://github.com/MemoryD/life_game",
packages=setuptools.find_packages(),
install_requires=[
"pygame <= 1.9.5",
],
classifiers=[
"Topic :: Games/Entertainment ",
"Topic :: Software Development :: Libraries :: Python Modules",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
],
)
-
name
是包名。发布之前请上 PyPi 搜索一下有没有同名的包,防止冲突。 -
version
是版本号,更新的时候会寻找比当前版本更高的版本号,所以不要乱写。 -
description
是短描述,一般是一句话。 -
long_description
是长描述,详细的介绍。但是我比较懒,也只写了一句话。 -
url
是你项目的地址。一般会填github
地址。 -
packages
是包列表。setuptools.find_packages()
可以自动找到目录下所有的包,在这个例子中是 “life_game”, 只有一个包。 -
install_requires
是这个包的所需的依赖。 -
classifiers
是分类。根据 PyPi Classifiers 填写,至少要包含所用的 Python 版本。
3.3 LICENSE
上传到 PyPi 的每个包都要包含许可证。
选择许可证:Choose License。
选择许可证后,打开 LICENSE
并输入许可证文本。选择了 MIT 许可证:
Copyright (c) 2018 The Python Packaging Authority
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
4. 构建项目
以下的命令 ,都在在外层 life_game
,也就是 setup.py
所在的目录进行。
-
检查一下
setup.py
文件是否有错误:python setup.py check
没有错误才能进行构建。
-
构建:
python setup.py sdist bdist_wheel
如果没有错误,则文件夹下面会生成好几个目录,其中重要的是 dist
目录:
dist\
|---- life_game-1.2.0.tar.gz
|---- life_game-1.2.0-py3-none-any.whl
这两个文件是要上传到 PyPi 网站上供别人下载安装的。
5. 上传
5.1 方法一
twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
然后输入你在 PyPi 注册的账号和密码就可以上传了。如下:
> twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
Uploading distributions to https://upload.pypi.org/legacy/
Enter your username: [username]
Enter your password: [password]
Uploading life_game-1.2.0-py3-none-any.whl
100%|█████████████████████████████████████████████████████████████████████████████| 7.41k/7.41k [00:02<00:00, 3.19kB/s]
Uploading life_game-1.2.0.tar.gz
100%|█████████████████████████████████████████████████████████████████████████████| 7.12k/7.12k [00:00<00:00, 11.7kB/s]
5.2 方法二
方法一有时候这样子上传好像会失败,而且每次都要输入 用户名和密码。
这时候我们就可以创建一个配置文件,简化每次的上传流程。
创建一个文件 .pypric
-
window 下,将
.pypric
放在C:\\User\用户名\
下。如果不能直接创建,就用cmd
输入命令:echo a 2>.pypric
-
linux 下,将
.pypric
放在~/
也就是%HOME
目录下。
创建好后,编辑,输入以下内容保存:
[distutils]
index-servers=pypi
[pypi]
repository = https://upload.pypi.org/legacy/
username: [username]
password: [password]
这时候要上传项目只需:
twine upload dist/*
然后就可以使用 pip 安装你的包了。
5. 小结
感觉发布在 PyPi 上以后就变得高大上了(虽然自己还是很菜),不过看着别人(女朋友)使用 pip 直接安装自己的项目还是挺有成就感的。
有趣的的可以试一下这个 小游戏。经典的生命游戏。
安装
pip install life_game
运行
python -m life_game
如果看完了发现还有疑问的话, 可以查阅官方文档:Packaging Python Projects
上一篇: ps祛痘用什么工具
下一篇: 数据结构思维笔记(十六)爬取百度百科