|
文章目录前言一、准备构建包的文件1.1pyproject.toml1.2MANIFEST.in1.3LICENSE1.4README.md二、构建包2.1安装build库2.2打包构建三、上传模块包到PyPI3.1注册PyPI账号3.2创建APIToken3.3创建.pypirc文件3.4安装twine库3.5上传模块包前言本文介绍如何打包一个简单的Python项目,以及如何将其上传到Python包索引平台(PyPI),供他人使用pipinstallxxx指令安装。一、准备构建包的文件文件目录结构:packaging_tutorial/├──pyproject.toml├──src/│└──example_package_YOUR_USERNAME_HERE/│├──__init__.py│└──example.py├──LICENSE├──MANIFEST.in└──README.md123456789说明:packaging_tutorial可以是任意的目录名,pyproject.toml是打包配置文件,src里面存放的就是你的程序代码,example_package_YOUR_USERNAME_HERE需要改成你期望发布的模块包名(官方建议是在包名后面加上自己的用户名,防止和现有库名重复),LICENSE是许可信息,MANIFEST.in是非必需的,如果需要打包代码文件夹以外的文件要在这里面配置,README.md就是readme文件,也是非必需。1.1pyproject.tomlpyproject.toml里可以配置包名、项目依赖等信息:[project]name="example_package_YOUR_USERNAME_HERE"version="0.0.1"authors=[{name="ExampleAuthor",email="author@example.com"},]dependencies=[]description="Asmallexamplepackage"readme="README.md"requires-python=">=3.7"classifiers=["ProgrammingLanguage:ython::3","License::OSIApproved::MITLicense","OperatingSystem::OSIndependent",][build-system]requires=["setuptools>=61.0"]build-backend="setuptools.build_meta"[project.urls]"Homepage"="https://github.com/pypa/sampleproject""BugTracker"="https://github.com/pypa/sampleproject/issues"1234567891011121314151617181920212223其中,name和前面的“目录结构”里的example_package_YOUR_USERNAME_HERE一致,该成你的模块包名。version是待构建模块包的版本号。authors是作者信息,可以添加多个作者。dependencies可以添加项目依赖的第三方库的信息,在安装时会自动安装这些依赖库。description是模块描述。readme指定readme文件,较长的描述可以写在readme文件里。requires-python是模块依赖的Python版本号。classifiers指定编程语言、许可证、操作系统的信息,基本就只用改License,有严格的写法要求,具体可以查看:https://pypi.org/classifiers/。build-system选择构建后端,支持Hatchling、setuptools、Flit、PDM#Hatchling[build-system]requires=["hatchling"]build-backend="hatchling.build"#setuptools[build-system]requires=["setuptools>=61.0"]build-backend="setuptools.build_meta"#Flit[build-system]requires=["flit_core>=3.4"]build-backend="flit_core.buildapi"#PDM[build-system]requires=["pdm-backend"]build-backend="pdm.backend"12345678910111213141516project.urls里可以添加一些链接,如bug反馈、文档等…例如:[project]name="bhsenti"version="0.0.1"authors=[{name="bhnw",email="bhshare.cn@gmail.com"},]dependencies=['transformers>=4.27.1','onnxruntime']description="基于三分类的中文情感分析"readme="README.md"requires-python=">=3"classifiers=["ProgrammingLanguage:ython::3","License::OSIApproved::GNUGeneralPublicLicensev3(GPLv3)","OperatingSystem::OSIndependent",][build-system]requires=["setuptools>=61.0"]build-backend="setuptools.build_meta"[project.urls]"Homepage"="https://github.com/yaokui2018""BugTracker"="https://github.com/yaokui2018/bhsenti/issues"1234567891011121314151617181920211.2MANIFEST.in可以在里面配置需要添加或者排除的Python代码以外的文件。格式示例如下:#包含所有文件和目录include*#排除不需要的文件和目录excludesome_directory/exclude*.txt1234561.3LICENSELICENSE用来告诉安装软件包的用户,他们可以根据条款使用你的软件包。请参阅https://choosealicense.com/。选择许可后,复制许可文本到LICENSE文件。MITLicense简短而直接,允许他人对你的项目几乎做任何事情,包括制作和分发闭源版本。对共享改进非常友好,因为它允许他人自由地使用、修改和分发你的代码。GNUGPLv3允许他人几乎做任何事情,但不允许分发闭源版本,要求任何基于你的项目构建的派生作品必须使用相同的许可证发布。与MIT许可证相比更加强调对开源共享的支持,鼓励共享改进并保证了代码的开放性。ApacheLicense2.0允许他人几乎做任何事情,包括制作、使用和分发闭源版本,但在使用你的专利时提供了一些额外的保护。要求在派生作品中包含原始许可和免责声明。…例如:选择MITLicenseCopyright(c)2018ThePythonPackagingAuthorityPermissionisherebygranted,freeofcharge,toanypersonobtainingacopyofthissoftwareandassociateddocumentationfiles(the"Software"),todealintheSoftwarewithoutrestriction,includingwithoutlimitationtherightstouse,copy,modify,merge,publish,distribute,sublicense,and/orsellcopiesoftheSoftware,andtopermitpersonstowhomtheSoftwareisfurnishedtodoso,subjecttothefollowingconditions:TheabovecopyrightnoticeandthispermissionnoticeshallbeincludedinallcopiesorsubstantialportionsoftheSoftware.THESOFTWAREISPROVIDED"ASIS",WITHOUTWARRANTYOFANYKIND,EXPRESSORIMPLIED,INCLUDINGBUTNOTLIMITEDTOTHEWARRANTIESOFMERCHANTABILITY,FITNESSFORAPARTICULARPURPOSEANDNONINFRINGEMENT.INNOEVENTSHALLTHEAUTHORSORCOPYRIGHTHOLDERSBELIABLEFORANYCLAIM,DAMAGESOROTHERLIABILITY,WHETHERINANACTIONOFCONTRACT,TORTOROTHERWISE,ARISINGFROM,OUTOFORINCONNECTIONWITHTHESOFTWAREORTHEUSEOROTHERDEALINGSINTHESOFTWARE.123456789101112131415161718191.4README.md就是readme文件了…没啥好解释的#ExamplePackageThisisasimpleexamplepackage.Youcanuse[GitHub-flavoredMarkdown](https://guides.github.com/features/mastering-markdown/)towriteyourcontent.12345二、构建包2.1安装build库pipinstall--upgradebuild12.2打包构建终端里切换到pyproject.toml文件所在目录,运行下面的指令:python-mbuild1等待构建完成,提示Successfullybuilt的提示,当前目录即会多出一个dist文件夹,里面有两个文件,即是打包好的文件。dist/├──example_package_YOUR_USERNAME_HERE-0.0.1-py3-none-any.whl└──example_package_YOUR_USERNAME_HERE-0.0.1.tar.gz123tar.gz文件是一个源发行版,而.whl文件是构建发行版。较新的pip版本会优先安装构建后的发行版,但如果需要的话会回退到源代码发行版。你应该始终上传源代码发行版,并为你的项目兼容的平台提供构建后的发行版。在这种情况下,我们的示例包在任何平台上都与Python兼容,因此只需要一个构建的发行版。如果本地使用,就可以直接pipinstallxxxxxx.whl安装模块包进行测试了。三、上传模块包到PyPI3.1注册PyPI账号在PyPI上注册一个帐号:https://pypi.org/account/register/。按提示完成电子邮件地址验证、以及一些安全设置。3.2创建APIToken访问:https://pypi.org/manage/account/token/,按下图步骤创建PyPIAPItoken.。3.3创建.pypirc文件在系统HOME目录创建.pypirc配置文件inux:~/.pypircWindows:C:\Users\用户名\.pypirc文件内容如下:[distutils]index-servers=pypi[pypi]repository=https://upload.pypi.org/legacy/username=__token__password=1234567其中,改成上一步创建的token(以pypi-开头的)。如果觉得不安全也可以username和password两行删除,在后面的上传过程中会提示让手动输入。3.4安装twine库pipinstall--upgradetwine13.5上传模块包终端里运行下面指令上传dist目录的模块包到PyPI平台。twineuploaddist/*1访问下面的链接就可以…剩下的应该都懂了over附录:本文构建的模块包源码:https://github.com/yaokui2018/bhsenti官方详细教程:https://packaging.python.org/en/latest/tutorials/packaging-projects/
|
|