Python -- 包管理--打包分发

python的神奇功能二、源码打包 「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」 源码打包~wheel方式 python的wheel介绍 wheel是python中的一个打包方式,它可以为你软件的依赖库或依赖软件提供打包,它打包的依赖包可以在每次使用都可以很方便的安装而不需要再次编译。 wheel的官方文档是wheel.readthedocs.io/en/latest/。 在它的使用过程中,有2个限制的地方: 1.提供给“setuptools”中的“bdist_wheel”命令的实现必须是“setuptool 阅读详情

为什么使用包管理

Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了
但是为了更多项目调用使用,或者共享给别人,就需要打包,或发布到网络,以便供人使用
目的也是为了符永
Pypi(Python Package Index),公共的模块存储中心,https://pypi.org/
在这里插入图片描述

主要工具

distutils

官方库distutils,使用安装脚本setup.py 来构建、安装包
从1998年就是标准库的一部分,直到2000年停止开发

setiptools

它是替代distutils的增强版工具集,包含esay_install工具,使用ez_setup.py文件。支持egg格式的构建和安装
提供查询、下载、安装、构建、发布、管理等包管理功能
setuptools是包管理的核心模块
后来,setuptools开发缓慢了,出现基于setuptools的distribute来替代setuptools。2013年,这两个项目重新合并,distribute被废弃,setuptools依然是Python安装打包的标准方式

pip

pip目前包管理的事实标准
构建在setuptools之上,替代easy_install的。同样提供丰富的包管理功能
Python3.4之前,需要单独安装,从Python3.4开始直接包含在安装文件中

wheel

wheel格式定义在PEP427中
wheel文件中不包含.pyc文件
提供bdist_wheel作为setuptools的扩展命令,这个命令可以用来生成新打包格式wheel
pip从1.4版本开始提供了一个wheel子命令来安装wheel包。当然,需要先安装wheel模块
它可以让Python库以二进制形式安装,而不需要再本地编译

使用setup.py打包

set.py创建一个源代码分发包的例子
可以再帮助文档chm上搜索索引setup,点击最上面的Distributing Python Modules(Legacy version),然后选择Writing the Setup Script,参照例子

from distutils.core import setup

setup(name='Distutils',
      version='1.0',
      description='Python Distribution Utilities',
      author='Greg Ward',
      author_email='gward@python.net',
      url='https://www.python.org/sigs/distutils-sig/',
      packages=['distutils', 'distutils.command'],
     )
  • name 名字
  • version 版本
  • description 描述信息
  • author 作者
  • author_email 作者邮箱
  • url 包的主页,可以不写
  • packages = [] 打包列表
  • packages=[‘distutils’]
    指定distutils,就会把distutils所有的非目录子模块打包
  • packages=[‘distutils’, ‘distutils.command’]
    逐级建立目录,但是只把distutils的所有非目录子模块打包,把distutils.command打包

在这里插入图片描述

# 包结构
m
|-- __init__.py
|-- m1.py
|-- m2
	|-- __init__.py
	|-- m21
		|-- __init__.py
	|-- m22.py

项目跟目录下,构建一个setup.py文件,如下

from distutils.core import setup

setup(name='m',
      version='0.1.0',
      description='Python test m',
      author='Alan',
      author_email='Alan@python.net',
      # url='https://www.python.org/sigs/distutils-sig/',
      # packages=['m', 'm.m1', 'm.m2', 'm.m2.m21'],
      packages=['m']
     )

查询命令的帮助

$ setup.py -- help [cmd1 cmd2 ...]
$ python setup.py --help -ciommands
$ setup.py cmd --help

build命令,编译

  • 创建一个build目录
    $ python setup.py build

  • 以下是packages=['m']配置的结果

running build
running build_py
creating build
creating build\lib
creating build\lib\m
copying m\m1.py -> build\lib\m
copying m\__init__.py -> build\lib\m

在项目目录下多了build目录,有一个lib子目录,lib下就是模块m的目录
m目录下的*.py文件被赋值了,但是子目录没有被复制

  • 以下是packages=['m.m2.m21']配置的结果
running build
running build_py
creating build
creating build\lib
creating build\lib\m
creating build\lib\m\m2
creating build\lib\m\m2\m21
copying m\m1.py -> build\lib\m
copying m\m2\m21__init__.py -> build\lib\m\m2\m21

可以看出,逐级构建了同样的目录结构,并只拷贝了m21的__init__.py文件

  • 以下是packages=['m','m.m2.m21']配置的结果
running build
running build_py
creating build
creating build\lib\m
creating build\lib\m\m2
creating build\lib\m\m2\m21
copying m\m2\m21\__init.py -> build\lib\m\m2\m21
copying m\m1.py -> build\lib\m
copying m\__init__.py -> build\lib\m

build得到的文件,直接拷贝到其他项目就可以用

install命令,安装

  • build后就可以install,直接运行
    $ python setup.py install
  • 如果没有build,会先build编译,然后安装

sdist命令

  • sdist命令
    $ python setup.py sdist
  • 创建源代码的分发包
  • 产生一个dist目录,里面生成一个带版本号的压缩包
  • 在其他地方解压缩这个文件,里面有setup.py,就可以使用$ python setup.py install安装了,也可以$ pip install m-0.1.1 zip 直接使用pip安装这个压缩包

bdist命令

二进制分发包,或称作安装程序。它可以生成目标操作系统的安装程序

制作windows下的安装包
$ python setup.py bdist_wininst
$ python setup.py bdist_msi
$ python setup.py bdist --format=msi

rpm包
$ python setup.py bdist_rpm
$ python setup.py bdist --format=rpm

压缩文件
$ python setup.py bdist --format=zip
$ python setup.py bdist --format=gztar

可以把自己写好的模块发布到公共的Pypi上,也可以搭建Pypi私服,供企业内部使用
Pypi里面的模块没有太好的审核机制,不能保证安全,需谨慎使用

wheel包

  • 安装wheel依赖
    $ pip install wheel

setup.py修改如下

#from distutils.core import setup # 可能失败
from setuptools import setup

setup(name='m',
      version='0.1.0',
      description='Python test m',
      author='Alan',
      author_email='Alan@python.net',
      url='https://www.python.org/sigs/distutils-sig/',
      packages=['m', 'm.m2', 'm.m2.m21'],
     )
python setup.py bdist_egg
python setup.py bdist_wheel
Python打包分发 文章目录Python打包分发1.包管理2.打包的主要工具3.使用setup.py打包命令行操作打包查询命令帮助1.build命令,编译2.install命令,安装3.sdist命令4.bdist命令5.wheel包 Python打包分发 1.包管理 Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了。但是为了更多项目调用使用,或者共享给别人,就需要打包,或发布到网络,以便供... 阅读详情

相关推荐

Simulink中通过MEX与MinGW实现C/C++结构体变量的高效导入

本文详细介绍了在Simulink中通过MEX工具链与MinGW编译器,高效导入C/C++结构体变量的完整流程。文章从需求背景出发,逐步讲解了MinGW环境配置、.h文件编写规范、核心导入命令Simulink.importExternalCTypes的使用,以及如何在MATLAB Function模块和总线创建器中调用自定义结构体,旨在实现模型与代码的无缝对齐,为后续仿真和代码生成奠定坚实基础。

weixin_29056781的博客 343

已解决python setup.py bdist_wheel did not run successfully.

已解决(pip安装第三方模块lxml模块报错)Building wheels for collected packages: lxml Building wheel for lxml (setup.py) … error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully. note: This error originates from a subprocess,and is li

努力让自己发光,对的人才能迎着光而来 5万+

二叉树随机漫步

元旦快乐! 学习到中本聪bitcoin的文章的calculation部分的时候,出现了binomial random walk,不是很明白什么是random walk。发现这个文章写的很好:https://blog.youkuaiyun.com/fireguard/article/details/16111603 随机漫步,也叫随机游走,最早是物理学中做"布朗运动"的微观粒子的运动形态来形成的一个模型,布朗运...

gjq5464的博客 1737

Python 包管理

Python 中的包管理 为什么使用包管理 Python 的模块或者源文件直接可以复制到目标目录中, 就可以使用 为了更多项目调用使用或者共享给别人, 就需要打包发布到网络, 以便供人使用, 当然目的也是为了复用 Pypi (Python Package Index), 公共的模块存储中心 : https://pypi.org/ 主要工具 distutils 官方库 distuti...

Bughuu的博客 1280

EDA开源仿真工具verilator入门4:访问函数介绍

访问函数(Visitor Function)是verilator算法实现的主要工作方式之一,本节将介绍一下访问函数。

fangfanglovezhou的博客 1076

SSE消息推送避坑指南:从Chrome兼容性到Spring超时配置

本文深入探讨了在Java Spring Boot项目中实现SSE消息推送时,从浏览器兼容性到后端配置的完整避坑指南。针对Chrome并发连接限制、Safari自动断开、Nginx代理缓冲以及Spring SseEmitter内存泄漏与超时管理等生产环境常见问题,提供了具体的解决方案和最佳实践配置,帮助开发者构建稳定可靠的实时推送系统。

work3的博客 450

python setup.py build命令解析

python setup.py build命令解析

jacke121的专栏 6323

东方通TongWeb虚拟主机配置全流程:从创建到应用部署的保姆级教程

本文提供东方通TongWeb虚拟主机从创建、HTTP通道配置到应用部署的完整实战指南。重点解析虚拟主机的逻辑隔离价值、通道参数调优原理及企业级多应用部署架构,并涵盖常见报错排查与性能优化建议,旨在帮助运维和开发人员高效、稳定地完成应用系统部署。

oil88的博客 531

python setup.py bdist_wheel生成wheel文件,示例:安装webrtcvad

webrtcvad因此需要利用setup.py进行安装本文还提供了Python3.7下,webrtcvad的最新版本(2.0.11.dev0,最后一次更新是2021年2月)的win_amd64和linux_armv7l架构wheel文件的下载链接链接:https://pan.xunlei.com/s/VNNarY2ackt_NZSmMRcOja8eA1 # 提取码:wj6g。

DEDSEC_Roger的博客 6138

【ARM Trace32(劳特巴赫) 高级篇 20 -- SNOOPer 使用介绍】

在 Lauterbach TRACE32 调试系统中,Snooper是一种特殊的监视工具,它能够在不中断处理器执行的情况下监视和记录特定内存地址的数据变化。这对于系统级调试、性能分析、数据流监视以及实时系统的问题追踪特别有用,尤其是在无法使用中断的情况下。当你设置了一个或多个Snooper时,TRACE32 硬件将不断地监视指定的内存地址,一旦发生了读写操作,就会将相关信息记录下来。这样你就可以看到某个地址的数据是什么时候以及如何被修改的,而不会影响目标系统的运行。

CodingCos的博客 2765

Altium Designer(AD)仿真实验操作指南

1:运行仿真2:设置仿真3:放置电源模块4:放置器件模块5:探针。

XU157303764的博客 8898

2019/12/04 01-python包管理和打包分发

目录使用__init__.py这样一个特殊文件指代目录是一个特殊的模块,在python中只有一个类型,都是模块类型,modules,从表现形式也是分目录和普通文件,目录称为包,普通.py文件称为模块 这些写出来其实都是为了复用,把包里面的文件复制过去就可以使用了,但是这种方式在本地文件系统还行,想传递给别人就有点难了 linux有tar命令压缩,比如10个图片,压缩成1个文件,但是体积其实没怎么...

qq_42227818的博客 290

SAP 合并报表(EC-CS)完整方法论 + 全业务操作步骤

SAP合并报表(EC-CS)方法论与操作指南摘要 SAP EC-CS模块提供完整的集团合并解决方案,其核心方法论基于会计准则和集团管控逻辑,通过6大维度构建标准化合并体系:组织架构标准化、数据采集标准化、外币换算规则化、内部交易自动化抵消、股权与商誉规范化、报表出具灵活化。 实施过程分为两个阶段: 上线前配置阶段(12个步骤):包括合并架构搭建、科目表配置、外币规则设定、抵消规则定义等基础工作 日常操作阶段(10个步骤):涵盖数据报送、外币换算、内部对账、自动抵消、调整分录等月结流程 系统优势包括: 支持多

金牌架构师 1365

python的包管理工具_Python的包管理工具

Python的包管理工具作者:尹正杰版权声明:原创作品,谢绝转载!否则将追究法律责任。一.为什么使用包管理Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了。 但是为了更多项目调用使用,或者共享给别人,就需要打包,或发布到网络,以便供人使用。 目的也是为了复用。Pypi(Python Package Index),公共的模块存储中心,https://pypi.python....

weixin_36303045的博客 810

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

十五天Python系统学习教程第五天

通过第五天的学习,您将掌握Python生态的依赖管理精髓,关键要点: 1️⃣ 虚拟环境是项目隔离的必备工具 2️⃣ requirements.txt是最基础的依赖管理方式,但pyproject.toml是未来趋势 3️⃣ 打包分发机制与Java有显著差异,需重点理解setup.py与__init__.py的作用

分享技术应用、实践场景等,评论区开放技术难题讨论,共同成长进步。 876

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python打包分发工具:setuptools

自定义命令行为是setuptools进阶知识。line)见:https://pythonhosted.org/an_example_pypi_project/setuptools.html这些命令具体是由定义在setuptools.command中的类执行的。比如由setuptools.command.bdist类来执行。因此我们可以继承于setuptools.command中的类来执行自定义的命令行为。

天涯路的专栏 2567

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python 打包术语全解析:开启 Python 包管理知识之门

Python 打包术语涵盖了从包的创建、分发到安装和管理等各个环节的专业词汇。这些术语是 Python 包管理生态系统的重要组成部分,准确理解它们能够让开发者更好地与其他开发者交流,更高效地使用相关工具和技术。掌握 Python 打包术语是开发者进行 Python 项目开发和管理的基础。通过深入理解分发包、导入包、依赖项、元数据和虚拟环境等术语的定义、应用场景和相互关系,开发者能够更好地使用 Python 包管理工具,解决项目开发过程中遇到的各种问题。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 1250

为什么python打包的应用那么大_如何打包和分发Python应用程序

介绍使用软件包管理器(例如pip)下载的所有Python库(即应用程序包)都使用专用于执行该作业的实用程序进行分发。 这些实用程序创建基本上是版本化(和压缩)归档的“Python分发版”。 所有与正在分发的内容相关的元素,如源文件和资源文件,都包含在其中。在这篇DigitalOcean文章中,我们将讨论用于分发的必要工具,并讨论关键步骤,以便您打包自己有用的库,模块或应用程序,这将有助于您在将项目...

weixin_39980002的博客 237

python中有很多包管理工具有哪些不是_理解Python包管理工具

distlibDistlib是一个库,用于实现与Python软件的打包和分发有关的低级功能。它包含在打包的Python软件包中的部分功能,该软件包原本打算作为Python 3.3的一部分发布,但在Python 3.3进入Beta测试之前不久就被删除了。这个计划目前已停滞。distutils由于维护包装系统(其中功能更新与语言运行时更新紧密耦合)带来的挑战,现在不鼓励直接使用distutils,最好...

weixin_36301989的博客 697

python3 setuptools_python3.5学习笔记:linux6.4 安装python3 pip setuptools

weixin_39683144的博客 125

python java是什么意思,什么是python相当于Java .jar文件?

Python没有任何与.jar文件完全相同的内容.有很多差异,不知道你想做什么,很难说明如何做.但是,Python Packaging User Guide在解释一切相关方面做得相当不错.这里有一些主要的区别..jar文件是可以删除到应用程序中,或安装在CLASSPATH任何地方的类的编译集合.在Python中:> .py(或.pyc)模块可以放在你的应用程序中,或者安装在你的sys.pat...

weixin_39801475的博客 629

python插件化设计_Python中的包管理及插件化开发

第三十六、包管理1、为什么使用包管理目的是为了便于共享。为了更多项目调用使用,或者共享给别人,就需要打包,目的是为了复用。Pypi(Python Package Index)公共的模块存储中心。https://pypi.python.org/pypi2、主要工具(1)distutils 官方标准库,使用安装脚本setup.py来构建、安装包。(2)setuptools 是替代distutils的...

weixin_39942191的博客 341

Python的包管理工具

Python的包管理工具 python包管理工具 python包管理工具简介 distribute是setuptools的取代,pip是easy_install的取代。 Distribute是对标准库disutils模块的增强,我们知道disutils主要是用来更加容易的打包...

chuange6363的博客 129

模糊老视频怎么变高清?Video2X 视频超分辨率与帧率插值完整指南

你翻出一盒上世纪九十年代录制的录像带,数字化后是一段 320×240 的画面:人脸发虚、边缘带锯齿、整体偏色。用普通软件放大,只是把像素拉长,放大四倍之后反而更糊。Video2X 视频超分辨率走的是另一条路——它用深度学习模型逐帧重建画面,把原本丢失的细节"猜"回来,而不是机械拉伸像素。同一套工具还能做帧率插值,把 30fps 补到 60fps,让动作连贯起来。 ## 🧩 它是什么,解决哪两类

gitblog_00016的博客 710

python打包:setuptools的使用

资料来源:https://blog.youkuaiyun.com/chenfeidi1/article/details/80873979 https://www.jianshu.com/p/ea9973091fdf 介绍 曾经 Python 的分发工具是 distutils,但它无法定义包之间的依赖关系。setuptools 则是它的增强版,能帮助我们更好的创建和分发 Python 包,尤其是具有复杂依赖关系的包。其通过添加一个基本的依赖系统以及许多相关功能,弥补了该缺陷。他还提供了自动包查询程序,用来自动获取包之.

岁月的博客 1640

Python 工具箱:包管理器、程序打包工具、镜像源设置、模块安装包下载

这是一个关于 Python 的工具箱,有包管理器、程序打包工具、镜像源设置工具、模块安装包下载器可用。

白泽的博客 1475
上一篇: Python--模块化
下一篇: Python -- 插件化开发
鹿夏
博客等级 码龄8年 24粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值