python通过setuptools打包与分发

news2024/9/21 7:10:00

目录

一:setup.py文件的书写

 二:setup.py 各个打包命令的使用:所需要用到的只有4个命令build / install / sdist / bdist 

1:build:  python setup.py build

2:install: python setup.py install

 3: sdist : python setup.py sdist

4: bdist 

三:包上传pypi

 四:python安装包的两种形式

五:.egg和.whl文件

六:包上传pypi时候需要注意的问题:


一:setup.py文件的书写

参考:Python 库打包分发(setup.py 编写)_qq314000558的博客-CSDN博客

重要的参数:

 packages / py_modules / scripts;

其中scripts指各种可执行脚本(比如.sh文件等,可以直接命令行xxx.sh文件执行),它所指定的文件会被直接复制到python可执行目录(好像是/usr/bin,这不重要,感兴趣可以自查)下;

现在,我们先构建如下目录结构的工程项目(为了不让大家混淆,我这里先把vsersion版本号去掉):

 

 二:setup.py 各个打包命令的使用:所需要用到的只有4个命令build / install / sdist / bdist 

1:build:  python setup.py build

build相当于把需要打包的文件先收集起来,如下,它将我们packages下的包都收集起来了,可以看到因为我们指定了exclude = [‘download'],所以bulid/lib下是没有download这个文件包的。

2:install: python setup.py install

install会将build/lib下的文件以及egg-info进行打包并进行二进制化成.egg文件,该文件在当前文件夹下的dist文件夹下,并且,会把这个egg文件复制到对应环境的site-packages包下面,此时可以直接import 这个egg中的内容,但是无法跳转,另外还会生成egg-info文件夹,里面就是一些日志文件:

参考:Python包的安装与导入详解(whl, egg)_python 安装egg_�Sintol·D·Kevin的博客-CSDN博客

此时的目录是这样(版本号遮掩先):

 

 此时取到对应虚拟环境的site-packages下面可以发现dist下对应的egg文件

 对这个egg文件进行unzip可以看到其实就是我们setup.py中packages中指定的几个包,再加上egg-info文件夹:

这个时候,在这个环境下就可以直接import visualization/model/logger这些了,但是不可以import xjm.visualization/model/logger,因为egg是这些包的打包,不存在xjm这个包;想上面参考中说的一样,如果在site-package下面解压这个egg包,那么在pip list和conda list下就可以看见visualization/model/logger这些了,而且调试的时候也可以跳进这些文件,但如果不解压的话,不仅调试的时候进不去,而且pip list和conda list下看不见

 3: sdist : python setup.py sdist

python setup.py sdist不会生成build文件夹,只会生成dist和egg-info文件夹;但此时dist下面的不是egg文件,而是tar.gz文件,是一个打包文件,也是打包的相同的东西;

4: bdist 

网上说sdist和bdist的区别一个是源码包,一个是二进制包;这里看到,bdist会同时生成build,dist,egg-info文件夹,且dist下面也会生成tar.gz文件,但我们可以看到,sdist和bdist生成的两个tar.gz文件是不一样的。

三:包上传pypi

 针对install生成的egg文件,sdist和bdist生成的tar.gz文件,我们来讨论该怎么上传pypi;

我们要把自己写的代码上传到pypi,供别人pip install,需要做两步:一是打包,即将你需要上传的代码进行打包,这一步就是我们第二大点中各个命令的作用,其中install生成的egg文件,sdist和bdist生成的tar.gz文件就是我们打包好的文件;第二步上传,网上有两种上传方式,python setup.py upload和twine upload dist/*,实验结果结合网上查证,第一种python setup.py upload已经弃用,目前上传pypi,都只能用twine upload dist/*。另外,twine需要单独pip,即pip install twine。

对于install生成的egg文件,sdist和bdist生成的tar.gz文件;三个都可以通过twine上传,但是install生成的egg文件和bdist生成的tar.gz文件无法通过pip install来下载,只有sdist的可以。且此时pip install下来的东西就是各个包了,像上面的logger/model/visualization这些包就直接在site-packages目录下了,另外还会有个dist-info文件,其实就是egg-info文件,一些说明信息,其实就是一些;不像install,只会有一个二进制的.egg文件

 

所以,要上传包到pypi的话,通过以下两步即可:

   pip setup.py sdist  / twine upload dist/*.tar.gz 

 四:python安装包的两种形式

一种就是我们常见在线的pip install; 另外一种离线安装方式,我相信很多同学也遇到过,有时候我们从git上面拉下来的一个项目,在安装过程中会让你进入到某个文件夹,然后执行python setup.py install 命令,所以python setup.py install也是一种安装包的方式;

五:.egg和.whl文件

两者其实都是压缩包,相当于.zip的别名,是可以直接通过unzip解压的。

六:包上传pypi时候需要注意的问题:

版本号必须是新的,不能重复,另外,即使你把你之前上传到pypi的东西删掉了,这个东西的命名你也不可以用。

另外,上传的包有一点滞后性,需要上传几分钟后才可以pip install。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Apk加固原理解析

前言 为什么要加固 对APP进行加固,可以有效防止移动应用被破解、盗版、二次打包、注入、反编译等,保障程序的安全性、稳定性。 常见的加固方案有很多,本文主要介绍如果通过对dex文件进行加密来达到apk加固的目的; APK加固整体…

【计算机视觉 | 目标检测】OVD:Open-Vocabulary Object Detection 论文工作总结(共八篇)

文章目录 一、2D open-vocabulary object detection的发展和研究现状二、基于大规模外部图像数据集2.1 OVR-CNN:Open-Vocabulary Object Detection Using Captions,CVPR 20212.2 Open Vocabulary Object Detection with Pseudo Bounding-Box Labels&…

Springboot创建项目bug

问题 今天创建maven项目,由于和教程不太一样,结果报错了 核心报错如下 Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.context.logging.LoggingApplicationListener 梳理 我的idea创建…

系统集成项目管理工程师 笔记(第六章:项目整体管理)

文章目录 项目整体管理6个过程制定项目章程过程 6.3 制订项目管理计划 2476.4 指导与管理项目工作 2516.5 监控项目工作 255监控项目工作的输入监控项目工作的工具与技术监控项目工作的输出 6.6 实施整体变更控制6.7结束项目或阶段 6.1 项目整体管理概述 242 6.1.1 项目整体管理…

【过程8】——能量守恒视角总结感受

一、背景 另一个角度的看到,观望着过程中自己曾经类似的经历(小舅子的工作)。 时间久了,经历多了,感悟会更加的充实;最近自己对于人在维持能量的过程中也有很多的感悟,一并做一下总结 二、过程 1.人为什么天性不愿意…

npm和yarn的相同点和不同点

官网 npmhttps://www.npmjs.com Home | Yarn - Package ManagerFast, reliable, and secure dependency management.https://yarnpkg.com Fast, disk space efficient package manager | pnpmFast, disk space efficient package managerhttps://pnpm.io 使用场景 npm&#x…

数据库系统概论--第五章课后习题

1.什么是数据库的完整性? 答:数据库的完整性是指数据的正确性和相容性。 2. 数据库的完整性概念与数据库的安全性概念有什么区别和联系? 答: 数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存…

将本地Python项目打包成docker镜像,上传到服务器,在docker中运行

文章目录 Docker环境创建虚拟环境pycharm使用虚拟环境准备打包保存为镜像文件加载镜像文件 参考文献 Docker环境 windows11Docker下载地址:https://docs.docker.com/desktop/install/windows-install/ 创建虚拟环境 虚拟环境可以搭建独立的Python运行环境&#x…

ORACLE_OCM.MGMT_CONFIG_JOB_2_2

今天巡检一套AIX上11g rac,发现有个报错 Errors in file /opt/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_j000_16777270.trc: ORA-12012: error on auto execute of job "ORACLE_OCM"."MGMT_CONFIG_JOB_2_2" ORA-29280: invalid director…

〖Python网络爬虫实战⑱〗- 数据存储之TXT纯文本

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…

WebSocket+Vue+SpringBoot实现语音通话

参考文章 整体思路 前端点击开始对话按钮后,将监听麦克风,获取到当前的音频,将其装化为二进制数据,通过websocket发送到webscoket服务端,服务端在接收后,将消息写入给指定客户端,客户端拿到发送…

Automa自动化爬取文本(一)

目录 介绍 下载地址 安装教程 爬取百度热搜 介绍 Automa 是一个免费、开源的 Chrome 扩展,它通过目前流行的 No Code 无代码方式,只需要拖拽模块就实现了浏览器自动化,比如自动填写表格、执行重复性任务。 在工作中,如果我们…

Docker安装Nginx(图文详解版)

目录 1.下载Nginx镜像 2.创建Nginx配置文件 3.创建Nginx容器并运行 4.查看效果 1.下载Nginx镜像 命令描述docker pull nginx下载最新版Nginx镜像 (此命令等同于 : docker pull nginx:latest )docker pull nginx:xxx下载指定版本的Nginx镜像 (xxx指具体版本号&a…

有趣的 Kotlin 0x14:Base64编码

前言 Concise. Cross‑platform. Fun. Kotlin 来到 1.8.20 版本, 又给开发者带来了很多更新, 今天关注下标准库中新增的 Base64 相关内容. 原理 Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式。它使用64个不同的字符(通常是A-Z、a-z、0-9和两个额…

学会SpringBoot的第一天(超详细)

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…

d2l Transformer

终于到变形金刚了,他的主要特征在于多头自注意力的使用,以及摒弃了rnn的操作。 目录 1.原理 2.多头注意力 3.逐位前馈网络FFN 4.层归一化 5.残差连接 6.Encoder 7.Decoder 8.训练 9.预测 1.原理 主要贡献:1.纯使用attention的Enco…

JavaFX与Liberica JDK,搭建,运行,打包,放弃Eclipse

1、官网 JavaFX中文官方网站、Oracle官方文档 2、教程 JavaFX中文基础教程视频合集 JavaFX实战教程 3、VSCode/Eclipse VSCode(写HelloWorld用)、VSCode的Java扩展 Eclipse,跳至第9段 4、Liberica JDK安装 Liberica JDK官网下载 依次选择,All ve…

压力测试防踩坑指南,压测中要注意的那些事儿

对于一些高频访问接口,压力测试必不可少,本文主要叙述了自己在压测过程中遇到的问题,在此分享,希望能帮助大家避免踩坑,提高效率。 1.pod数量 现象:服务器资源充足,tps上不去,检查发…

OneData 共享同一套数据技术和资产

一、什么是 OneData 体系? 官方:阿里云OneData数据中台解决方案基于大数据存储和计算平台为载体,以OneModel统一数据构建及管理方法论为主干,OneID核心商业要素资产化为核心,实现全域链接、标签萃取、立体画像,以数据…

ASEMI代理ADI亚德诺ADAU1701JSTZ-RL车规级芯片

编辑-Z ADAU1701JSTZ-RL芯片参数: 型号:ADAU1701JSTZ-RL 模拟电源电压:3.3 V 数字电源电压:1.8 V 输入/输出电压:3.3 V 环境温度:25 C 主时钟输入:12.288 MHz 满刻度模拟输入&#xff1…