python如何打包,实现pip install

官方地址

https://packaging.python.org/tutorials/packaging-projects/

打包流程

创建pyproject.toml(可选)

pyproject.toml是告诉构建工具(例如pip10+和 build)的文件,您正在使用的系统以及构建所需的系统。如果缺少此文件,则默认为假定使用经典的setuptools构建系统,但最好明确一些。如果您有pyproject.toml文件,您将可以依赖wheel和存在其他软件包。大多数项目用以下设置就够了

[build-system]
requires = [
    "setuptools>=42",
    "wheel"
]
build-backend = "setuptools.build_meta"

build-system.requires提供构建软件包所需的软件包列表。在此处列出某些内容只会使其在构建期间可用,而在安装之后不可用。

build-system.build-backend从技术上讲是可选的,但是setuptools.build_meta:__legacy__如果您忘记包含它,则会得到 替代,因此请始终包含它。如果要使用flit或poetry之类的其他构建系统, 这些将在此处使用,并且配置详细信息将与下面描述的setuptools配置完全不同。看PEP 517和PEP 518了解背景和详细信息

配置元数据

元数据有两种类型:静态和动态。

静态元数据(setup.cfg):setup.cfg是一个ini文件,其中包含setup.py命令的默认选项 。setup.cfg提供一种方式,可以让包的开发者提供命令的默认选项,同时为用户提供修改的机会。对setup.cfg的解析,是在setup.py之后,在命令行执行前

动态元数据(setup.py):setup.py的主要特征是它包含一个全局setup()函数。此函数的关键字参数是如何定义项目的特定详细信息。

静态元数据应该是首选,动态元数据仅在绝对必要时才用作逃生舱口(官网原话,但是发现好多都是用的*setup.py*)。
元数据参数详情

静态源数据
[metadata]
# replace with your username:
# 包名
name = example-pkg-YOUR-USERNAME-HERE  
# 软件版本
version = 0.0.1
# 作者
author = Example Author
# 作者邮箱
author_email = author@example.com
# 该软件包的简介,一句话摘要
description = A small example package
# 软件详细说明这在Python软件包索引的软件包详细信息页面上显示。在这种情况下,将README.md使用file:指令加载长描述,这是一个常见的模式。
long_description = file: README.md 
# 告诉索引用于长描述的标记类型
long_description_content_type = text/markdown
# 项目主页的URL。对于许多项目,这仅是指向GitHub,GitLab,Bitbucket或类似代码托管服务的链接。
url = https://github.com/pypa/sampleproject
# 可让您列出要在PyPI上显示的任意数量的额外链接。通常,这可能是文档,问题跟踪器等。
project_urls =
    Bug Tracker = https://github.com/pypa/sampleproject/issues
# 一些额外的源数据
classifiers =
    Programming Language :: Python :: 3  # 该软件包使用的python版本
    License :: OSI Approved :: MIT License  # MIT许可证
    Operating System :: OS Independent  # 兼容的操作系统

[options]
# 软件包名称和目录的映射。空的程序包名称表示“根程序包”,即项目中包含该程序包的所有Python源文件的src目录
package_dir =
    = src
# 应该包含在分发包中的所有Python导入包的列表。无需手动列出每个软件包,我们可以使用指令自动发现所有软件包和子软件包并 指定要使用的。find:options.packages.findpackage_direxample_pkg
packages = find:
# 项目支持的Python版本。
python_requires = >=3.6

[options.packages.find]
where = src
动态源数据(如果包含该文件,即使没有参数也要调用setup())
import setuptools

with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()

# 必须要调用,即使没有参数
setuptools.setup(
    name="example-pkg-YOUR-USERNAME-HERE", # Replace with your own username
    version="0.0.1",
    author="Example Author",
    author_email="author@example.com",
    description="A small example package",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/pypa/sampleproject",
    project_urls={
        "Bug Tracker": "https://github.com/pypa/sampleproject/issues",
    },
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    package_dir={"": "src"},   # 这里有坑,如果有两个src目录好像会有问题,直接不指定改参数,下面不指定where就没问题,后续再搞清楚原因
    packages=setuptools.find_packages(where="src"),
    python_requires=">=3.6",
)

创建README.md
安装软件包
方式一

打包先上传到pypi公有库,然后直接pip install

方式二

直接把代码上传到git仓库,github,gitlab,gitee都行,然后通过以下命令安装

- pip install git+<git仓库地址>
- pip install git+<git仓库地址>@<分支名称>

# 需要账号密码登录时用以下命令,注意:如果用户名密码包含@字符,需要转义: %40, 如账号为xxx@qq.com, 密码为123456, 仓库地址为https://gitee.com/xxx/xxx.git

- pip install git+https://xxx%40qq.com:123456@gitee.com/xxx/xxx.git

方式三

通过pypiserver搭建私有库,搭建教程参考pypiserver github地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值