前言
本文以笔者实际发布的 python 包 imgkernel
为例。因此,在本文所有出现 imgkernel
的地方,都替换成读者自己项目或包的名称。 同时,imgkernel
也托管在 github 上,后续 master 分支会更新,但是项目单独检出的 pkg
分支将保持与本文内容一致,不再改动。因此,可以将此分支 clone
下来作为新项目启动工程。clone pkg
分支的方法如下:
git clone -b pkg https://github.com/kenblikylee/imgkernel.git
下面分步骤讲解 imgkernel
项目的创建,生成,发布测试,正式发布到 PyPi 和安装使用。
1. 创建github仓库
2. 克隆仓库到本地
git clone https://github.com/kenblikylee/imgkernel.git
cd imgkernel
3. 创建 setup.py
setup.py 是 setuptools 的构建脚本,告知 setuptools 包的名称和版本,以及哪些文件将被打包。
在项目根目录新建文件 setup.py ,复制黏贴如下代码到 setup.py:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="imgkernel",
version="0.0.1",
author="ken",
author_email="kenbliky@gmail.com",
description="Image kernel.",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/kenblikylee/imgkernel",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
)
4. 创建项目包 imgkernel
setup.py 会自动查找项目根目录下,包含文件 __init__.py 的子目录,作为项目的包,并以目录名称作为包名。这里只创建了一个与项目同名的包 imgkernel
,当然不是必须创建一个同名的包,事实上,可以创建任意名称的多个包。
创建后,整个项目目录结构如下:
.
├── imgkernel
│ ├── __init__.py
│ ├── imgconv.py
│ └── kernels.py
├── LICENSE
├── README.md
└── setup.py
imgkernel 包有三个文件: __init__.py
, imgconv.py
, kernels.py
,下面分别是三个文件的代码实现:
4.1 __init__.py
__init__.py 是包内部模块对外的导出接口,或者说,当使用 import
时的导入对象。 我们把需要提供外部应用使用的函数,数据,类等都放在这个文件里。当然,并非一定要此文件里实现,import
进来的模块也会被导出,例如下面的 kernels
下的所有 kernel 以及 imgconv
函数。
from .kernels import *
from .imgconv import imgconv
def identity(imgpath, gray=True, **argkw):
return imgconv(imgpath, identity_kernel(**argkw), strides=1, mean=False, gray=gray)
def sharpen(imgpath, gray=True, **argkw):
return imgconv(imgpath, sharpen_kernel(**argkw), strides=1, mean=False, gray=gray)
def blur(imgpath, gray=True, **argkw):
return imgconv(imgpath, blur_kernel(**argkw), strides=1, mean=False, gray