文件结构
完整的项目结构应该如下,如果是静态打包的方式,里面还应该多一个setup.cfg文件
源码所在的文件夹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/*
评论区