当你看到这篇文章的时候,说明你已经在python领域有所涉猎,已经不是当初的那个小白了。直接进入正题!本文做初次使用记录,随时更新

建立包结构

比如:我们想封装一个切图的功能,存放方式

1
2
3
4
5
project
├──slice
├──__init__.py
├──img_slice.py
├──setup.py

包也可以有多层结构:

1
2
3
4
5
6
7
project
├──slice
├──__init__.py
├──img_slice.py
├──utils
├──__init__.py
├──setup.py

将以上slice包移动到你需要的conda虚拟环境envs下,找到python的根site_packages文件夹内,然后就可以直接使用import导入以上包或者指定模块,python会按照包和模块搜索路径完成加载

上面这种方式和后面的安装本地wheel和pip安装原理是一样的

封装wheel

完善setup.py信息,里边包含了你要封装的wheel的所有信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import setuptools #导入setuptools打包工具

# with open("README.md", "r", encoding="utf-8") as fh:
# long_description = fh.read()

setuptools.setup(
name="package-name", # 发布wheel包名 ----需修改
version="0.0.1", # 包版本号,便于维护版本
author="Author", # 作者,可以写自己的姓名
author_email="author@example.com", # 作者联系方式,可写自己的邮箱地址
description="A small example package", # 包的简述
long_description='long_description', # 包的详细介绍,一般在README.md文件内, 或者用字符串定义
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject", # 自己项目地址,比如github的项目地址
# packages=setuptools.find_packages(),
packages=['slicess'] # python项目文件夹的名字,安装包名。和name保持一致 ----需修改
python_requires='>=3.6', #对python的最低版本要求
)

创建本地wheel

3.1 安装setuptools和wheel

1
2
#安装或更新setuptools和wheel
python3 -m pip install --upgrade setuptools wheel

3.2 打包并生成.whl文件

1
2
cd project
python3 setup.py bdist_wheel

运行完成后,会在project目录下生成两个文件夹,一个build文件夹,一个dist文件夹,生成的wheel就在dist文件夹中。

直接pip install 那个wheel即可pip install slice-0.0.1-py3-none-any.whl

上传至PyPi

4.1 首先,需要有个PyPi的账号
没有先注册,PyPi官网传送门。其实token名字和token value不用也行
4.2 安装twine

1
2
# 安装或更新twine
python3 -m pip install --user --upgrade twine

4.3 使用twine上传至PyPi

1
python3 -m twine upload dist/*

上传过程会提示输入用户名和密码,直接输入你注册时候的username和password 即可。
有两个注意事项:

  1. 有文章说在testpypi先测试,没问题再上传正式的pypi网址,这是可取的
  2. 有些文章建议在上传分发时,使用token名字和token value作为登录名字和密码,这个读者可自行决定,笔者是直接用注册的账户名和密码登录的。

4.4 安装线上的PyPi包

1
pip install --index-url https://pypi.org/simple/  slice

记得加上url,否则可能下载的时候找不到包。

版本更新

修改好自己的包版本内容后,修改setup.py中的版本号即可。

调用

1
2
3
4
5
6
import slice.img_slice as crop

input_dir = '/home/adt/Desktop/demo'
crop_size = 768

crop.img_crop(input_dir, crop_size)

如果不想在上传PyPi的时候输入密码,可以这样做:
在用户根目录下创建文件~/.pypirc,并写入以下内容

1
2
3
4
5
6
[distutils]
index-servers=pypi
[pypi]
repository = https://upload.pypi.org/legacy/
username = 你的用户名
password = 你的密码