赞
踩
下面的TestPypi的也是一样,他们的创建方法和使用方法都是一样的,只是一个是正式的环境,一个是给你的测试环境
需要注意⚠️的是:
写入文件的时候,内容区分好。一个是[pypi]一个是[testpypi]
pip3 install build # 构建包的工具
pip3 install twine # 上传包的工具
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "Sanic-Admin" # 项目名
version = "0.1" # 版本号
authors = [
{ name="A-Corner", email="a.corner.vj@gmail.com" },
] # 作者
description = "The Admin backend created by the combination of Sanic And Amis manages SANic-admin" # 说明
readme = "README.md" # pypi介绍内容会读取的readme文件
requires-python = ">=3.9" # 依赖
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
]
[project.urls]
"Homepage" = "https://github.com/A-Corner/Sanic-Admin" # 源连接
MANIFEST.in是Python项目中的一个文件,通常用于指定源分发包中应该包括哪些额外的文件或文件夹。它的格式是一系列命令和模式匹配规则,告诉setuptools在打包时包含或排除特定的文件和目录。
下面是MANIFEST.in文件中常用的命令和对应的含义:
- include pat1 pat2 …:打包时包含所有与任何一个模式匹配的文件,可以使用Unix shell-style通配符。
- exclude pat1 pat2 …:排除所有与任何一个模式匹配的文件。
- recursive-include dir pat1 pat2 …:递归地包含所有与任何一个模式匹配的文件,其中dir是相对于源代码目录的路径。
- recursive-exclude dir pat1 pat2 …:递归地排除所有与任何一个模式匹配的文件,其中dir是相对于源代码目录的路径。
- global-include pat1 pat2 …:在源树中包含与任何一个模式匹配的文件,无论其位置如何。
- global-exclude pat1 pat2 …:在源树中排除与任何一个模式匹配的文件,无论其位置如何。
- prune dir:排除dir目录及其子目录中的所有文件。
- graft dir:包含dir目录及其子目录中的所有文件。
include pyproject.toml
# Include the README
include *.md
# Include the license file
include LICENSE.txt
# Include the static file or data file
recursive-inculde src/Sanic-Admin/test *.*
recursive-include src/Sanic-Admin/admin *.*
在使用TOML格式的打包方式时,setup.py文件通常会使用tomlkit库来读取和解析pyproject.toml文件,并从中提取有关项目的信息。然后,根据这些信息生成setuptools.setup()函数需要的参数并调用它。
在这个过程中,MANIFEST.in文件被视为源代码目录的一部分,并且必须在构建过程的早期被处理。这是因为MANIFEST.in文件中指定了哪些文件应包含在打包中,而这些文件必须在安装或分发软件包之前已经存在于正确的位置。
因此,在构建时先执行MANIFEST.in文件,然后再读取pyproject.toml文件,并使用其中的信息来配置setuptools.setup()函数的参数。如果您的MANIFEST.in文件包括需要特殊处理的文件(例如数据文件或模板),则可以使用setup.py脚本的特殊函数(例如include_package_data)来确保它们被正确地包含在软件包中。
当你编写好配置文件,并且把你的包存放在src
的目录下,就可以执行打包动作:
执行命令:
# 打包
python3 build
# 打包后就会创建dist的目录,你需要上传的包就在dist目录下
# 上传
python3 -m twine upload --repository testpypi dist/*
像往常一样使用 twine upload 命令将 Python 项目上传到 PyPi 上,意外地遇到了 401 错误:
WARNING Error during upload. Retry with the --verbose option for more details.
ERROR HTTPError: 401 Unauthorized from https://upload.pypi.org/legacy/
User fournoas has two factor auth enabled, an API Token or Trusted Publisher must be used to upload in place of password.
应该是 PyPi 调整了安全策略,不再允许启用两步验证的账号使用用户名密码来上传项目了,必须使用 API 令牌来进行身份验证。
登录 PyPi ,进入账户设置页,点击「添加 API 令牌」按钮创建 API 令牌。然后修改 ~/.pypirc 配置文件, 用户名字段改为 token ,密码字段改为刚才创建的令牌:
具体的需要去登录PYPI/TestPypi上去创建API Token
按照界面提示修改后在重试上传就可以了。
当你上传成功后,登录testpypi就可以看到你刚刚上传的包,然后点击查看
在查询详情页中,就有安装你的测试pypi的命令,可以复制后在command-line下创建一个新的虚拟环境,执行安装测试下
安装你在test-Pypi上的包进行测试
pip3 install -i https://test.pypi.org/simple/ Sanic-Admin
如果没有问题,就重新上传到pypi中。这次可以不指定上传的源地址。
如果你有静态文件,必须要在MANIFEST.in
中使用 recursive-include dir pat1 pat2
来包含进去,如果不递归包含,打包的时候不会进行纳管的。
如果你还有项目子目录,在子目录中都必须要有__init__.py
文件,除非你在MANFIEST.in
中include
了整个子目录的所有文件,要不就必须有__init__.py
文件,如果没有,打包进程不会对包进行纳管。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。