如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index)。刚开始我以为要将代码打包放到PyPI上是一件非常复杂繁琐的事情,不过看过《Dive Into Python 3》的PACKAGING PYTHON LIBRARIES介绍(CHAPTER 16),并自己动手操作了一下,发现打包发布这个事情并没有想象中的那么有难度。为了方便其他朋友阅读的方便,就尝试写了这个博文,来记录下如何将自己写的Python代码打包上传到PyPI上。
第一步,打包
比如我现在有一个python文件,文件名叫
jfbrequests
,想要把这个文件发布到pypi,使用的时候直接pip install jfbrequests
安装,我需要建立这样的目录结构:
jfbrequests/
|
+-- __init__.py
|
+-- myscripts1.py
|
+-- mysscripts2.py
|
+-- mymorescripts.py
|
jfbrequests
就是你的包名,该文件夹下必须包含__init__.py
,可以把想要发布的代码放在这个里面
第二步,加料
想要把包发布到pypi,还需要重新改造一下,目录结构如下:
jfbrequests/
|
+-- jfbrequests/
. |
. +-- __init__.py
. |
. +-- myscripts1.py
. |
. +-- mysscripts2.py
. |
. +-- mymorescripts.py
. |
.
|
只是又加了一层文件夹,是不是很简单,接着往下走
第三步,终章
我们需要在最终版的目录结构中创建几个文件,先上代码,再解释
jfbrequests
|
+-- COPYING.txt
|
+-- README.txt
|
+-- MANIFEST.in
|
+-- README.rst
|
+-- setup.py
|
+-- jfbrequests
. |
. +-- __init__.py
. |
. +-- myscripts1.py
. |
. +-- mysscripts2.py
. |
. +-- mymorescripts.py
. |
.
|
+-- docs/
|
- COPYING.txt: 就是授权文件,里面是你关于这个包的授权,比如:MIT license,那么你里面放入MIT License全文即可,如果你不清楚这个,完全可以不用写,但最好创建该文件
- README.txt: 这个文件的作用相比都知道吧,不解释了
- README.rst: 同上
- MANIFEST.in: 内容可以写
include COPYING.txt
- setup.py: 核心文件,具体内容在下面讲
- docs/: 这是个文件夹,放你的开发文档
好了,目录已全部创建完成,接下来我问为setup.py
添加内容
第四步,setup.py
import codecs
import os
import sys
try:
from setuptools import setup
except:
from distutils.core import setup
"""
打包的用的setup必须引入,
"""
def read(fname):
return codecs.open(os.path.join(os.path.dirname(__file__), fname)).read()
NAME = "jfbrequests" # 1,需要改:模块名
PACKAGES = ["jfbrequests", ] # 2,需要改:模块名
DESCRIPTION = "this is a test package for packing python liberaries tutorial." # 模块描述,可选改
LONG_DESCRIPTION = read("README.rst")
KEYWORDS = "test python package" # 关键字,可选改
AUTHOR = "jiangfubang" # 3,需要改:作者名
AUTHOR_EMAIL = "luckybang@163.com" # 4,需要改:邮箱
URL = "https://github.com/jiangfubang/jfbrequests" # 5,需要改:一般写模块的github地址
VERSION = "1.4.23" # 6,需要改:版本号
LICENSE = "MIT" # 授权方式,可选改
setup(
name = NAME,
version = VERSION,
description = DESCRIPTION,
long_description = LONG_DESCRIPTION,
classifiers = [
'License :: OSI Approved :: MIT License',
'Programming Language :: Python',
'Intended Audience :: Developers',
'Operating System :: OS Independent',
],
keywords = KEYWORDS,
author = AUTHOR,
author_email = AUTHOR_EMAIL,
url = URL,
license = LICENSE,
packages = PACKAGES,
include_package_data = True,
zip_safe = True,
)
第五步,注册pypi账号,创建用户验证文件~/.pypirc
[distutils]
index-servers=pypi
[pypi]
repository = https://upload.pypi.org/legacy/
username = pypi用户名
password = pypi密码
第六步,发布相关命令
1. 检测所有文件配置是否正确
python setup.py check
输出:running check
2. 打包
python setup.py sdist
3. 注册
twine register dist/*
4. 上传
twine upload dist/*
网友评论