目 录CONTENT

文章目录

静态、动态脚本打包pypi

chenming
2021-08-04 / 0 评论 / 0 点赞 / 226 阅读 / 0 字 / 正在检测是否收录...

文件结构

完整的项目结构应该如下,如果是静态打包的方式,里面还应该多一个setup.cfg文件
image

源码所在的文件夹rccpshennong、描述文件README.md、非py文件打包配置MANIFEST.in、打包脚本setup.py

打包脚本分为动态和静态两种:setup.py和setup.cfg;两者区别是,动态脚本是python代码,静态脚本本质上是配置文件,静态脚本更加精简和安全。

动态脚本

创建setup.py,配置推送包的信息

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

setuptools.setup(
    name="rccpshennong", # 包名,请不要和私库内现有包的包名重复
    version="0.0.1",	# 版本
    author="ChenMing",	# 作者
    author_email="ChenMing@example.com",	# 作者邮箱
    description="A small example package",		# 包概要描述
    long_description=long_description,   # 包具体描述,会读取README文件内的描述
    long_description_content_type="text/markdown", # README文件的格式
    url="https://xxxxxxxxx",  # 本项目url(可选,一般写github的地址)
	# packages = find_packages(include=["xxx","xxx"]),打包包含文件写include=[],排除写exclude=["xxx","xxx"]
    packages=setuptools.find_packages(),
    install_requires=['emei',], # 本包依赖的其他包,pip install 会根据这个自动拉去后续的依赖
    include_package_data=True, # 包内有非py文件,一并打包进去(需要配合MANIFEST.in文件)
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ], # 元信息补充(可选)
    python_requires='>=3.6', # 运行本包的python版本
)

静态脚本

创建setup.cfg,配置推送包的信息

[metadata]
name = rccpshennong  # 包名,请不要和私库内现有包的包名重复
version = 0.0.1      # 版本
author = ChenMing    # 作者
author_email = ChenMing@example.com  # 作者邮箱
description = A small example package	# 包概要描述
long_description = file: README.md    # 包具体描述
long_description_content_type = text/markdown  # README文件的格式
url = https://xxxxxxxxx  # 本项目url(可选,一般写github的地址)
classifiers =          # 元信息补充(可选)
    Programming Language :: Python :: 3
    License :: OSI Approved :: MIT License
    Operating System :: OS Independent

[options]
packages = find:
python_requires = >=3.6  # 运行本包的python版本
install_requires = emei  # 本包依赖的其他包
include_package_data = True  # 包内有非py文件,一并打包进去
因为信息都在setup.cfg配置了,setup.py如下:
import setuptools

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

setuptools.setup(

)

生成依赖文件

进入源码根目录,也就是rccpshennong文件夹下,执行(如果没有pipreqs,请先pip install pipreqs)
pipreqs ./ --encoding utf-8

  • 此时当前路径下就会生成requirements.txt,里面是当前项目所有的依赖。我们后续打包都会把这个txt都打包进去,方便拉取项目后用这个txt进行以来的安装所有依赖。

  • 当然,有了这个依赖文件后,也可以在setup.py(或setup.cfg)的install_requires里面配置上所有依赖,这样拉取时会自动拉取所有依赖,不用手动安装

MANIFEST.in

recursive-include:递归包含rccpshennong下的所有文件
recursive-include rccpshennong/* *
或者不指定具体文件夹全打包进去
global-include *

打包

在当前目录下生成dist文件夹,里面有两个文件(whl和tar);whl是编译好的文件和源代码,tar只包含源代码。pip install 会在whl存在时优先安装whl,在whl安装失败后才会试着加载tar。

# 同时打包成二进制文件(whl文件)和源码文件(tar包)
python setup.py sdist bdist_wheel
# 只打包成源码文件(tar包)
python setup.py sdist

用twine模块进行推送,推送成功后,仓库内有同时有whl和tar两个文件
twine upload dist/*

0

评论区