文章目录
- 概要
- 模块和包
- 发布自己的package
- 创建目录结构
- 发布
概要
提示:这里可以添加技术概要
例如:
openAI 的 GPT 大模型的发展历程。
模块和包
在Python中,程序的划分可以分为三个层次:脚本、模块和包
- script:独立的Python代码文件,可以被执行或作为其他程序的一部分进行调用。通常,脚本是一个单独的.py文件,其中包含可执行的代码
- module:模块通常包含一些函数、类、变量和常量等,可以被其他程序导入和调用。在Python中,导入模块是一种常见的代码组织方式,可以将代码分解成更小的、可重用的模块
- package:通常包含一个或多个模块文件和一个名为__init__.py的初始化文件。包可以是一个文件夹,也可以是一个压缩文件。包的主要目的是为了更好地组织和管理模块、以便于复用和维护
发布自己的package
创建目录结构
创建一个测试项目文件夹package_demo,在该项目下,创建一个待发布的包目录demo_pk,并在项目文件夹下创建setup.py、LICENSE、README.md,此时,目录结构如下:
README.md
demo package
LICENSE
一半的开源软件会选择相对宽泛的许可证MIT(The MIT License),也就是坐着保留版权,没有其他任何限制
更多许可可以参考:https://choosealicense.com/
MIT License
Copyright (c) [2024] [zhengyu]
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.
setup.py
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="zy_demo1", # 模块名称
version = "1.0.1", # 当前版本
author="zhengyu", # 作者
author_email="543278005@qq.com", # 作者邮箱
description="simple demo package", # 简短介绍
long_description=long_description, # 模块详细介绍
long_description_content_type="text/markdown", # 模块详细介绍格式
packages=setuptools.find_packages(), # 自动找到项目中导入的模块
# 模块相关的元数据(更多描述信息)
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
# 依赖模块
install_requires=[
'numpy',
'opencv-python'
],
python_requires=">=3",
# url="https://github.com/UncoDong", # github地址
)
demo.py
import numpy as np
import cv2
class ImageProcess:
'''
图像处理类
'''
def __init__(self, img_path, dst_width, dst_height) -> None:
self.img_path = img_path
self.dst_width = dst_width
self.dst_height = dst_height
def preprocess(self):
'''
返回处理后的图像以及仿射变换矩阵M
'''
img = cv2.imread(self.img_path)
scale = min((self.dst_width / img.shape[1]), (self.dst_height / img.shape[0]))
ox = (-scale * img.shape[1] + self.dst_width) / 2
oy = (-scale * img.shape[0] + self.dst_height) / 2
M = np.array([
[scale, 0, ox],
[0, scale, oy]
], dtype=np.float32)
img_pre = cv2.warpAffine(img, M, dsize=[self.dst_width, self.dst_height], flags=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_CONSTANT, borderValue=(114,114,114))
return img_pre, M
发布
- List item
确保拥有setuptools和wheel
pip install setuptools wheel
在setup.py位于的同一目录运行此命令:
python setup.py sdist bdist_wheel
主要是为了生成这两个玩意
-
PyPI
https://pypi.org/注册一个属于你自己的账号
接着设置认证
认证后获取API token
-
安装twine
pip install twine
- 安装完成之后,运行下面的命令上传包。会让你输入之前获得的API token
twine upload dist/*
如果有这个类似的报错,应该是名字重复了,把你要发布的package换个名字
- 验证
发布了你的package后 可以持续的迭代版本。不要随意删除以发布的package
zy-demo被我删除了以后,这个包名被永久占用了,你无法继续更新和使用这个包名了