Python站
  • 说明
  • 源码分析
  • 100 系列
  • python
    • 开发基础
      • 数据类型
      • 字符编码
      • 文本操作
      • 玩转Python100解
    • 函数编程
      • 装饰器
      • 内置函数
        • vars
      • 内置模块
        • enum
        • os
        • argparse
        • importlib
        • shelve
        • collections
        • re
      • 神奇三方
        • setuptools
        • celery
    • 面向对象
      • 面向对象100解(草稿)
    • 网络编程
      • 网络理论知识
      • 网络编程socket
      • socketserver源码泛读
    • 并发编程
      • 并发编程之多进程
        • 子进程基本使用
        • 进程的属性或方法
        • 守护进程
        • 互斥锁
        • 队列
        • 生产者消费者模型
      • 并发编程之多线程
        • 子线程基本使用
        • GIL全局解释器锁
        • 死锁现象与递归锁
        • 信号量事件定时器
        • 线程队列queue
      • 并发编程之进程线程池
      • 并发编程之协程
      • 并发编程之IO模型
        • 阻塞IO
        • 非阻塞IO
        • 多路复用IO
        • 异步IO
        • IO模型比较分析
    • 数据库说
      • mongoengine源码精读
    • 前端开发
    • 后端开发
      • flask源码精读
      • django源码精读
        • 01 软件打包与部署
        • 02 python调试工具 pdb
        • 03 创建一个django项目
    • 爬虫相关
      • Jupyter Notebook
      • urllib
      • urllib3源码泛读
      • 数据解析
      • requests源码精读
        • 初始化说 __init__.py
        • 版本信息 __version__.py
        • 版本兼容 compat.py
        • 经典视图 api.py
        • 逻辑实现 sessions.py
        • 数据存储 models.py
        • 网络传输 adapters.py
        • 异常结构 exceptions.py
        • 交互协定 status_code.py
        • 钩子编程 hooks.py
        • 数据结构 structures.py
        • 辅助输出 utils.py
        • 安全认证 auth&certs.py
    • 编程思想
      • 算法
      • 数据结构
      • 设计模式
        • 简单工厂模式
        • 工厂方法模式
        • 抽象工厂模式
        • 建造者模式
        • 单例模式
        • 适配器模式
        • 桥模式
        • 组合模式
        • 外观模式
        • 代理模式
        • 责任链模式
        • 观察者模式
        • 策略模式
        • 模板方法模式
      • Python技巧100解
      • Effective Python
    • 企业应用
      • DevOps
      • Web服务-Nginx
      • 网站发布
      • 源码管理
        • Git
        • GitHub
        • GitLab
      • Golang
      • Docker
      • Ubuntu
    • 项目实战
    • 就业相关
    • 其他爱好
      • 科技单词100解答
Powered by GitBook
On this page
  • 项目程序结构
  • 使用安装文件创建 wheel
  • 安装 wheel
  • 上传wheel到pypi
  • setup() 参数
  • 其他初始化文件
  • 参考链接
  1. python
  2. 函数编程
  3. 神奇三方

setuptools

setuptools 是 python内置distutils的加强版,可以更好地创建和分发python包,尤其是解决了包之间的依赖关系

项目程序结构

开源项目最外层为项目名称,如最外层的nining,其中包含核心源码程序包nining和安装文件setup.py

nining
  |- nining
       |-__init__.py
       |-contrib
           |-__init__.py
           |-thrid.py
       |-app.py
       |-constant.py
       |-errors.py
       |-logs.py
  |- setup.py

使用安装文件创建 wheel

Source distribution

使用sdist可以大包成source distribution,支持的压缩格式有.tar.gz和.zip

python setup.py sdist --formats=gztar,zip

现在目录下多出dist和*.egg-info目录

  • dist内保存了打好的源码包,名为为setup.py中定义的name,version以及指定的包格式,如nining-0.0.1.tar.gz

  • --formats指定打出.tar.gz和.zip包

Built distribution

使用bdist可以打出built distribution, 和源码包相比,由于预先构建好,所以安装更快

wheel也是一种built包,而且是官方推荐的打包方式

pip install wheel
python setup.py bdist_wheel

python setup.py bdist_wininst  # windows exe 格式

执行成功后,目录下除了dist和*.egg-info目录外,还有一个build目录用于存储打包中间数据。wheel包的名称为 nining-0.0.1-py3-none-any.whl,其中py3指明只支持python3

安装 wheel

使用bdist_wheel打包后,可以使用pip安装到本地python的site-packages目录

pip install dist/nining-0.0.1-py3-none-any.whl

可以和其他使用的pip安装第三库一样使用

from nining.app import func

func()

应用开发过程中会频繁变更,每次安装都需要先卸载旧版本很麻烦。使用develop开发模式安装的话,实际代码不会拷贝到site-packages下,而是除了一个指向当前应用的链接(*.egg-link),这样当前位置源码改动就会马上反映到site-packages

pip install -e . # 或者 python setup.py develop

上传wheel到pypi

wheel包可以自己使用和传输给其他人使用,但是维护更新不方便,而pypi作为python的软件仓库,让所有人可以方便的上传和下载,以及管理第三方库

  • pip install twine,因setup.py upload 只支持http上传包到pypi,由twine取代

  • twine upload dist/*

  • 输入username和password即上传至pypi,如果不想每次输入账号,可在家目录下创建.pypirc

[distutils]
index-servers =
pypi

[pypi]
repository: https://upload.pypi.org/legacy/
username: ***
password: ***

setup() 参数

name

项目名,也是最终在pypi上搜索的名称,如name='nining'

version

项目版本,一般由major,minor,maintence组成,如version='0.0.1'

packages

列出项目内需要被打包的所有package,一般用setuptools.find_packages()自动发现

packages=find_packages(exclude=['docs', 'tests*'])

description

项目的简短描述,会显示在pypi名字下面,如description='First process about setuptools'

对项目的完整描述,使用long_description,如果此字符串是rst格式的,pypi自动渲染成html显示

url

通常为github的链接或readthedocs链接

author

作者信息

author='nining'
author_email='nining1314@gmail.com'

license

classifiers

其他初始化文件

在阅读github上的python库时,除了最基本核心的setup.py文件和主程序之外,还有其他一些文件

setup.cfg

包含构建时的一些默认参数

[bdist_wheel]
universal=1

用于在使用 bdist_wheel 的时候的默认设置 --universal 参数

README.rst/README.md

MANIFEST.in

此文件在打源码包的时候告诉setuptools还需要打包哪些文件

LICENSE

项目许可说明文件

参考链接

Previous神奇三方Nextcelery

Last updated 5 years ago

登录 ,注册账号

项目许可证,如license='MIT', 更多可参考

项目分类,完整可参考

项目说明文档,使用可以在pypi上很好的渲染

https://pypi.org/
https://choosealicense.com/
https://pypi.org/pypi?%3Aaction=list_classifiers
reStructureText
源文链接
在pypi上发布python包详细教程