分成两部分进行分享:一是创建项目打包,二是发布项目(重点)。
一、创建项目进行打包。
借鉴网址:Python 项目打包并发布到私有 PyPI 服务器 | Jckling's Blog
1.首先创建一个待发布的文件夹packaging,my_project是我们需要打包的python项目整理一下项目结构并添加几个必要的文件(LICENSE
、README.md
、setup.py
)项目结构如下:
packaging ├── my_project │ ├── module1 │ │ ├── __init__.py │ │ └── hello.py │ ├── module2 │ │ ├── __init__.py │ │ └── bye.py │ ├── __init__.py │ └── utils.py ├── LICENSE ├── README.md └── setup.py # 或 setup.cfg
2.每个上传到 PyPI 的软件包都必须包含许可证。这会告诉安装软件包的用户使用条款。有关选择许可证的帮助,请参阅 Choose an open source license | Choose a License。选择许可证后,打开 LICENSE
并输入许可证文本。例如,如果您选择了 MIT 许可证: 填入年份([year]
)和所有者([fullname]
或 [name of copyright owner]
)
MIT License Copyright (c) [2023] [my_project] 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.
3.编写setup.py文件:
import setuptools
with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
setuptools.setup(
name="my_project",
version="0.0.1",
author="jckling",
author_email="jckling@163.com",
description="A small example package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/jckling",
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
packages=setuptools.find_packages(),
python_requires=">=3.6",
)
4.文件整理编写完成后准备打包:
在打包之前,最好确保setuptools和wheel库是最新的。如果需要,以下命令将更新它们:
pip install -U setuptools wheel
准备完成后在终端输入:python setup.py sdist bdist_wheel 对sdk进行打包,打包完成会多出两个文件,packaging.egg-info和dist。结构目录如下:
packaging ├── dist │ ├── my_project-0.0.1.tar.gz │ ├── my_project-0.0.1-py3-none-any.whl ├── my_project │ ├── module1 │ │ ├── __init__.py │ │ └── hello.py │ ├── module2 │ │ ├── __init__.py │ │ └── bye.py │ ├── __init__.py │ └── utils.py ├── LICENSE ├── packaging.egg-info ├── README.md └── setup.py # 或 setup.cfg
二、发布打包项目
1. 可以通过配置.pypirc文件,方便Python打包,如windows无法直接创建文件可命名为“.pypirc.”进行创建,该文件一定要放在主目录下$HOME\.pypirc,就是cmd打开的那个目录下如,在该目录下创建一个.pypirc文件,输入你pypi,testpypi的用户名密码就可以通过命令进行上传发布,你可以选择发布到pypi上或者testpypi上。
我的文件内容如下所示:
[distutils]
index-servers =
pypi
testpypi[pypi]
repository: https://pypi.org/pypi
username: abc
password: pypi- ..............................[testpypi]
repository: https://test.pypi.org/legacy/
username: abc
password: pypi- ..............................
2.打开项目目录packaging执行上传发布命令,可以根据需求选择以下两种
上传发布到pypi的命令,这个命令属于正式发布到公开库中 :
twine upload --repository pypi dist/*
上传发布到test-pypi的命令,这个命令是发布到你的测试库中便于测试:
twine upload --repository testpypi dist/*
3.有些小伙伴可能会遇到配置文件.pypirc密码配置的问题。接下来详细介绍一下如何获取这个密码token。
(1).开始登录:
登录基本信息(注意此时的password并非一次的登录密码,因为开启了Two-factor authentication所以需要通过身份验证器生成的数字作为密码二次验证登录):
username: apple_pie
email: 525710451@qq.com
password: Lx562Np%vS90
(2).正确的登录密码应通过浏览器的扩展程序“身份验证器”去获取。身份验证器可通过谷歌浏览器的应用商店进行搜索安装如下图所示:
安装完成后,点开扩展应用,点击编辑图标,点击加号图标。
点击手动输入,在密钥中输入双重认证密钥
签发方Pypi,完成之后可以看到每30秒会出现一个动态密码,那就是登录密码。
(3).登录之后找到账号设置点击进入
找到添加token按钮,点击添加token
弹出验证,输入步骤三中的密码进行验证
验证成功后创建token名以及选择该token的权限
创建成功之后注意会弹出一个token值,一定要进行安全保存,因为这个token只会出现一次,不要踩坑。
(4).获取token后就可以把token复制到你的.pypirc文件中密码那一栏,完成后就可以通过上传命令进行发布啦!!