|
在正文开始之前,我们先来了解什么是sdk,SDK是SoftwareDevelopmentKit的缩写,译为”软件开发工具包”,通常是为辅助开发某类软件而编写的特定软件包,框架集合等,SDK一般包含相关文档,范例和工具.举个例子,有两杯奶茶:小A的那一杯有根吸管,小B的这一杯没有吸管,这个时候小B就需要借用小A的吸管来喝(这就是sdk的作用)我们应该怎么去做好sdk的工作呢?来听我给你大白话描述首先要创建一个项目目录:packaging├──my_project (给自己的功能取个名字——英文)│ ├──module (功能名称)│ │ ├──__init__.py(可以理解为你功能的输入和输出也可以为空)│ │ └──hello.py (功能代码) │ ├──module2 (和module1一样)│ │ ├──__init__.py │ │ └──bye.py│ ├──__init__.py │ └──utils.py├──README.md (解释功能和使用方法)└──setup.py (配置文件)如果小伙伴们看不懂以上的信息,下面就是一个完整的流程和用法:my_project我可以给我的项目取个名字比如我要做个文本解析的pypi包那我就可以叫他文本解析(file_processor)packaging├──file_processor (给自己的功能取个名字——英文)│ ├──module (功能名称)│ │ ├──__init__.py(可以理解为你功能的输入和输出也可以为空)│ │ └──hello.py (功能代码) │ ├──__init__.py ├──README.md (解释功能和使用方法)└──setup.py (配置文件)my_project\module比如我要做pdf解析我们就给他取名字pdf解析(pdf_processor)packaging├──file_processor (给自己的功能取个名字——英文)│ ├──pdf_processor (功能名称)│ │ ├──__init__.py(可以理解为你功能的输入和输出也可以为空)│ │ └──hello.py (功能代码) │ ├──__init__.py ├──README.md (解释功能和使用方法)└──setup.py (配置文件)my_project\module\hello.py然后就是将你编写好的python代码放入到你的功能目录里面取名(processor_pdf)packaging├──file_processor (给自己的功能取个名字——英文)│ ├──pdf_processor (功能名称)│ │ ├──__init__.py(可以理解为你功能的输入和输出也可以为空)│ │ └──processor_pdf.py (功能代码) │ ├──__init__.py ├──README.md (解释功能和使用方法)└──setup.py (配置文件)举个代码例子:#python代码fromlangchain.document_loadersimportPyPDFLoaderfromtypingimportListdefprocess_pdf(file_path:str)->List[str]:loader=PyPDFLoader(file_path)pages=loader.load_and_split()return[page.page_contentforpageinpages]my_project\module\init.py这个文件就是你processor_pdf.py代码的输入输出也可以不写直接为空举个例子:首先创建两个功能代码一个是解析的代码,一个是保存的代码packaging├──file_processor (给自己的功能取个名字——英文)│ ├──pdf_processor (功能名称)│ │ ├──__init__.py(可以理解为你功能的输入和输出也可以为空)| | ├──read_pdf.py (写一个解析pdf的代码)| | ├──save.py (写一个保存解析结果的代码)│ │ └──processor_pdf.py (功能代码) │ ├──__init__.py ├──README.md (解释功能和使用方法)└──setup.py (配置文件)read_pdf.py(解析代码)#调用你的功能代码processor_pdf.pyimportosfrom.process_pdfimportprocess_pdfdefprocess_file(file_path:str,save_dir:str)->str:_,file_extension=os.path.splitext(file_path)save_path=os.path.join(save_dir,os.path.basename(file_path)+'.txt')file_extension.lower()=='.pdf':content='\n'.join(process_pdf(file_path))save_to_txt(content,save_path)returnsave_path#上面就是一个简单的pdf解析代码save.py(保存代码)#直接写怎么保存解析后文本的代码就行defsave_to_txt(content:str,save_path:str):withopen(save_path,'w',encoding='utf-8')asfile:file.write(content)#这是个简单保存的代码最后就来解释一下init.py怎么用#演示python代码:from.process_pdfimportread_pdf #(调用解析代码read_pdf.py中的process_pdf函数)from.save_to_txtimportsave #(调用保存代码save.py中的save_to_txt函数)#以上就是init.py的作用 简单点来说就是把read_pdf代码中的输入拿过来 save.py中的输出拿过来做的拼接#当然也可以不写init.py 在你的源码(processor_pdf)中如果有输入解析输出保存一整个服务链完整就行现在我们的结构:packaging├──file_processor (给自己的功能取个名字——英文)│ ├──pdf_processor (功能名称)│ │ ├──__init__.py(可以理解为你功能的输入和输出也可以为空)| | ├──read_pdf.py (写一个解析pdf的代码)| | ├──save.py (写一个保存解析结果的代码)│ │ └──processor_pdf.py (功能代码) │ ├──__init__.py (可写可不写功能(module)多的话建议写)├──README.md (解释功能和使用方法)└──setup.py (配置文件)README.md(解释说明)#配置自定义所需配置:显卡4090可接受环境:python3.8需要的导入的包:langchain功能:解析pdf怎么用:先解析再保存效果:嘎嘎好以上是举得一个例子,还是要按照自己功能的实际情况来定。当然这个是比较简单的readme解释,按照自己功能来写(最终目的用户用的方便,能看懂每一块在做什么)到了最为关键的一步了setup.py#这些就是setup.py的模版在这只做了个演示大家可以根据自身实际情况来修改(可以添加功能说明也可以自由发挥)importsetuptoolswithopen("README.md","r",encoding="utf-8")asfh:long_description=fh.read()setuptools.setup(name="my_project",version="0.0.1",author="jiexi",author_email="jiexi@163.com",description="Asmallexamplepackage",long_description=long_description,long_description_content_type="text/markdown",url="https://github.com/jckling",classifiers=["ProgrammingLanguage:ython::3","License::OSIApproved::MITLicense","OperatingSystem::OSIndependent",],packages=setuptools.find_packages(),python_requires=">=3.6",)文件整理编写好之后准备做打包工作#在打包之前确保setuptools和wheel库是最新的如果需要更新以下命令可以更新pipinstall-Usetuptoolswheel准备工作做好之后在终端进入到你的my_project目录中:#输入以下命令对sdk进行打包:pythonsetup.pysdistbdist_wheel 打包完成后目录:packaging├──dist│ ├──file_processor-0.0.1.tar.gz│ ├──file_processor-0.0.1-py3-none-any.whl├──file_processor│ ├──pdf_processor│ │ ├──read_pdf.py│ │ └──save.py│ │ ├──__init__.py│ │ └──processor_pdf.py│ └──__init__.py├──packaging.egg-info├──README.md└──setup.py 以上工作做完之后就做好了打包下面就要开始往pypi上传代码了首先创建一个.pypirc(这就是文件名字不是后缀名),创建好之后放入到你的用户路径中这是我本地的用户的路径C:\Users\22428然后右键点击编写内容将.pypirc内容修改成:#将.pypirc内容修改成以下内容your_username和your_password需要替换为在PyPI注册的实际用户名和密码方法1:只复制以下信息其他不用复制[distutils]index-servers=pypi[pypi]repository:https://test.pypi.org/legacy/username=your_usernamepassword=your_password方法2:只复制以下信息其他不用复制[distutils]index-servers=pypi[pypi]repository:https://test.pypi.org/legacy/username=__token__password=你的API令牌接下来就是上传命令:#先下载twinepipinstalltwine然后进入到file_processor项目的主目录的终端(与setup.py并齐)如图在输入最后一条命令你的功能sdk就打包上传好了twineupload--repositorypypidist/*结语:这一步结束之后整个打包封装sdk流程就结束了,可以重新创建python环境然后使用下载命令做测试哦
|
|