如何发布自己的 python 包?

前言本文以笔者实际发布的 python 包 imgkernel 为例。因此,在本文所有出现 imgkernel 的地方,都替换成读者自己项目或包的名称。 同时,imgkernel 也托管在 github 上,后续 master 分支会更新,但是项目单独检出的 pkg 分支将保持与本文内容一致,不再改动。因此,可以将此分支 clone 下来作为新项目启动工程。clone pkg 分支的方法如下:...
摘要由CSDN通过智能技术生成

前言

本文以笔者实际发布的 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
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值