python 包和模块 发布库

2023-05-16

官方文档

环境准备

  • setuptools
  • pip
  • wheel
  • twine

发布前准备

创建一个项目:

  • 项目名称
  • 包名称
    • __init__.py
    • 模块
  • setup.py
  • README.rst
  • LICENSE.txt
  • MANIFESY.in

命名建议

  • 全部小写
  • 多个单词以中划线作为分割,不要使用下划线(_)pip对下划线支持不是很好
  • 不能和pypi上已有的包名重复

setup.py

作用:项目信息的配置文件,最重要的就是执行一个setup函数,通过这个函数来指明信息

实例

from distutils.core import setup
setup(形参1 = 实参1, 形参2 = 实参2)

建议使用:

from setuptools import setup
setup(形参1 = 实参1, 形参2 = 实参2)

参数说明:
名称 name
name = 'sz-lib‘

版本 version
version = ‘1.0.0’

描述信息 description
description = ’this is a very niubi lib‘

需要处理的包列表 packages
packages = [‘szlib’]

需要处理的单文件模块列表 py_modules
py_modules = [‘single_module’]

作者 author
author = ‘sz’

作者邮箱 author_email
author_email = ‘xxx@qq.com’

长描述 long_description, 会显示在pypi的项目介绍中
long_description = ‘描述’

依赖的其他包 install_requires
install_requires = [‘requests>2.18’]

python 版本限制 python_requires
python_requires=’>=3’

项目主页地址 url
url = ‘https://’

协议 license
license = ‘MIT’

具体setup.py 脚本文档: Packaging Python Projects

README.rst

rst: reStructuredText
重新构建的文本
作用:
可以使用特定的字符,来描述文本的格式
pypi平台能够自动识别long_description字段中所写的这种格式的字符串,但是如果把这些字符串都写在一个单独的README.rst文件中,然后在setup.py文件中,读取这个文件内容,并赋值给long_description

语法说明

语法检测
有时会发现,写的rst文件,无法在Pypi平台正常显示,pypi上对于rst的解析器并不是sphinx,导致部分语法有一些差异
解决方法,先从本地对long_description进行验证,之后再上传

pip install readme_renderer
python setup.py check -r -s

产生html:

python C:\Users\wqr57\appdata\local\programs\python\Python37\Scripts\rst2html.py .\README.rst a.html

LICENSE.txt

作用:声明库的一些使用责任等等,比如所有权归属,别人是否可以对代码进行任何操作,是否可以用于其他商业用途等等
choosealicense

MANIFEST.in

用于声明需要打包的文件,如,LICENSE.txt
setuptools 打包会自动添加README.rst, distutils则不会,需要再MANIFEST.in中添加

include LICENSE.txt
include README.rst

Specifying the files to distribute

编译生成发布包

查看帮助:

py .\setup.py --help-commands

生成源码压缩包,包含setup.py,模块源文件,数据源文件等,可以使用在任何平台上重新编译所有内容
–formats=压缩格式1,压缩格式2

python .\setup.py sdist
python .\setup.py sdist --formats=zip,tar

bdist 生成二进制发行包,不包含setup.py,是某个特定平台和python版本的一个存档

python .\setup.py bdist
python .\setup.py bdist_egg
生成egg包,需要安装setuptools
python .\setup.py bdist_wheel
生成wheel包,需要安装wheel
python .\setup.py bdist_wininst
生成exe

上传包到pypi

需要提前安装 twine

twine upload dist/sztestlib-1.0.0.zip
twine upload dist/sztestlib-1.0.0.whl

区分模块的测试与发布状态

借助 __name__ 来区分py文件被执行的模式
py直接被执行,此值为 __main__
被当作模块来执行,此值为模块名称

# py文件的入口
if __name__ == '__mian__':
	在此py 中可被执行,其他import 则不会被执行

包的入口为 __main__.py

python 包名称
# 则会执行模块中的__main__.py
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 包和模块 发布库 的相关文章

随机推荐