python的disutils创建分发包
python中的distutils包主要用创建共享包,安装包,在平时安装python模块的时候,使用的命令如下:
python setup.py install
其实以上代码就是distuitls包提供的功能,直接使用setup.py来进行安装一个包,在用这种方式安装包之后,就可以直接在系统中进行import这个模块。
主要就是在安装的时候,已经将这个包install到python的类库中,从而可以直接进行import,也相当于将这个模块的路径放到了python寻找模块的路径当中。
此文主要用来讲述,如何使用python中的distutils模块来制作一个安装包。
1、 几个关键参数作用
packages:由字符串组成的一个list,即disutils需要操作的python包
package_dir:包所对应的目录名称,一个字典格式
scripts:单独的script文件用来创建和插入的,字符串组成的列表
data_files:需要插入的数据文件,一个list;主要用来放一些配置文件等,在list中的每个记录中都是一个tuple,(目录,文件),目录表示要插入的地方,文件表示为需要把哪些文件插入到目录中,data_file的文件名称是不能改变的。
2、 关于为啥要使用包
在进行打包的时候,有两种使用方式,一种是使用包的方式,也就是我们所要讲的方式,一种是使用模块的方式,一般使用模块的时候,最好是只有一个模块或者这几个模块在同一个包中。
在有多个模块需要打包的时候,而且多个模块在不同的包中,那么就可以使用包的方式进行打包,也就是指定packages的方式,当使用package的方式的时候,在package的目录中,必须存在一个文件为__init__.py,表示这个是一个包,其中的内容可以为空。
3、根据目录结构创建setup.py
以下为例子中的目录结构,如下所示:
[root@FTP ~]# tree ansible ansible |-- README |-- bin | `-- ansible |-- lib | `-- ansible | `-- __init__.py |-- library | `-- kel `-- setup.py4 directories, 5 files
根目录为ansible,然后在里面具有setup.py文件,有一个包为lib/ansible/,在这个包里有指定的init文件,从而这个是一个包,还有个一个是脚本文件为bin/ansible,在其中类库未library/kel,从而可以写出其中的setup.py文件内容如下:
from distutils.core import setupsetup(name='ansible',version='1.0',description='this is a test of the disutils',packages=['ansible'],package_dir={'ansible':'lib/ansible'},data_files=[('/usr/share/',['library/kel']),],scripts=['bin/ansible'] )
以上表示的意思为:name表示此模块的名称,version表示版本,description表示为一个描述信息,packages表示包,package_dir表示包对应的目录,data_files表示需要拷贝的配置文件,上述表示拷贝library目录下的kel文件到/usr/share目录中,scripts可执行脚本问bin/ansible,记住基本都是相对路径,除了要拷贝的地方也就是/usr/share
进行打包命令如下:
[root@FTP ansible-1.0]# python setup.py sdist running sdist running check warning: check: missing required meta-data: urlwarning: check: missing meta-data: either (author and author_email) or (maintainer and maintainer_email) must be suppliedwarning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)writing manifest file 'MANIFEST' creating ansible-1.0 creating ansible-1.0/bin creating ansible-1.0/lib creating ansible-1.0/lib/ansible creating ansible-1.0/library making hard links in ansible-1.0... hard linking README -> ansible-1.0 hard linking setup.py -> ansible-1.0 hard linking bin/ansible -> ansible-1.0/bin hard linking lib/ansible/__init__.py -> ansible-1.0/lib/ansible hard linking library/kel -> ansible-1.0/library creating dist Creating tar archive removing 'ansible-1.0' (and everything under it
进行打包之后,会在当前目录下新建一个文件夹名称为dist,在其中会有一个压缩包名称为ansible-1.0.tar.gz,表示的意思为name加上版本号,进行解压缩,然后安装,如下:
[root@FTP dist]# ls -l total 4 -rw-r--r-- 1 root root 694 May 10 09:05 ansible-1.0.tar.gz [root@FTP dist]# tar -zxf ansible-1.0.tar.gz [root@FTP dist]# cd ansible-1.0 [root@FTP ansible-1.0]# ls PKG-INFO README bin lib library setup.py [root@FTP ansible-1.0]# python setup.py install running install running build running build_py creating build creating build/lib creating build/lib/ansible copying lib/ansible/__init__.py -> build/lib/ansible running build_scripts creating build/scripts-2.7 copying and adjusting bin/ansible -> build/scripts-2.7 changing mode of build/scripts-2.7/ansible from 644 to 755 running install_lib running install_scripts copying build/scripts-2.7/ansible -> /usr/local/python/bin changing mode of /usr/local/python/bin/ansible to 755 running install_data running install_egg_info Removing /usr/local/python/lib/python2.7/site-packages/ansible-1.0-py2.7.egg-info Writing /usr/local/python/lib/python2.7/site-packages/ansible-1.0-py2.7.egg-info
在上面的信息可以看到,脚本文件ansible已经拷贝到了/usr/local/python的bin/ansible中,这个目录主要是看python的安装位置,我的python是安装在/usr/local/python中,从而默认拷贝到python的安装路径中。
可以看到拷贝配置文件的时候,是没有看到具体的拷贝信息的,但是在实际上已经插入了相关的类库配置文件,如下所示:
[root@FTP other-2.0]# ls -l /usr/share/kel -rw-r--r-- 1 root root 86 May 9 09:23 /usr/share/kel
从而类库文件也会进行插入。
总结:
在python中使用模块distutils,core中的setup方法来进行打包,打包的时候也可以打包成rpm的格式,也可以打包成exe的windows格式,具体的查看官方文档即可,网址为:
https://docs.python.org/2/distutils/index.html#distutils-index
在进行打包的时候,选择使用包的方式还是模块的方式,如果使用包的方式,那么表示有好几个模块分布在不同的包中,如果使用模块的方式,那么表示模块都在一个包中的情况下。
在打包的时候执行的指令为python setup.py sdist,在安装包的时候,解压,然后执行python setup.py install
在进行打包的时候,主要就是setup.py文件的写法,注意其中的包的路径均为相对路径,参数的类型具体可以参看官方文档:
https://docs.python.org/2/distutils/apiref.html#module-distutils.core
https://www.mihaoyun.com
https://www.cnblogs.com/traditional/p/13213173.html(《Cython系列》2. 编译并运行 Cython 代码的几种方式 )
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
python的disutils创建分发包
python中的distutils包主要用创建共享包,安装包,在平时安装python模块的时候,使用的命令如下: python setup.py install 其实以上代码就是distuitls包提供的功能,直接使用setup.py来进行安装一个包,在用这种…...
![](https://img-blog.csdnimg.cn/img_convert/a4e1ecba7409d437ff0c9c2126aaa836.png)
【洛谷】P1195 口袋的天空
明显看出为最小生成树,那么:难点在哪里呢?if(cntn-k)//******{flag1;break;}为什么是cntn-k呢而不是k呢?!!!解释:(如果每个已经连在一起了就不能分开,不管多少…...
![](https://img-blog.csdnimg.cn/f20afa4a7c4048d4b0ff788133f6e867.png)
JavaScript高级程序设计读书分享之3章——3.5操作符
JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 目录 操作符 一元操作符 递增/递减操作符 一元加和减 布尔操作符 逻辑非 逻辑与 逻辑或 乘性操作符 乘法操作符 除法操作符 取模操作符 加性操作符 加法操作符 减法操作符 关系操作符 相等操…...
![](https://img-blog.csdnimg.cn/9f071ef5289345e0ac4ef0dfdca365ec.gif)
moveToCoordinateF3DconcatenateRotations
moveToCoordinate 演示视频: 注意:前提是3~6轴机器人机构且不是PickAndPlace 该方法_3D。Poses.moveToCoordinate 移动由 指定的对象,该对象 对应于支持的机器人配置之一,只要标识的机器人配置支持,其第一个动画指向指定坐标和指定旋转。这无需您定义姿势即可工作。 工…...
![](https://www.ngui.cc/images/no-images.jpg)
多线程面试题开胃菜6(5道)
一、Fork/Join 框架是干什么的?大任务自动分散小任务,并发执行,合并小任务结果。二、线程数过多会造成什么异常?线程过多会造成栈溢出,也有可能会造成堆异常。三、说说线程安全的和不安全的集合。Java 中平时用的最多的…...
![](https://img-blog.csdnimg.cn/3c4ddf7a558240eab78d7198fe71fedd.png)
植物大战 List——C++
这里写目录标题vector和stirng的细节对于stringlist的使用list的迭代器反向迭代器构造函数关于list::sort的排序uniquelist的底层模拟实现结点类的实现迭代器模拟实现list实现插入的实现迭代器失效inserterase析构函数拷贝构造赋值构造函数vector和stirng的细节 复习vector的深…...
![](https://img-blog.csdnimg.cn/img_convert/a306cacad0b0601e5f228979984d8d3f.jpeg)
安灯(andon)系统是车间现场管理的必备工具
安灯(andon)系统应用越来越广泛,不单单局限于汽车行业,更多生产型企业意识到了提高工作效率的重要性,提高工作效率根本的能提高生产水平,提高产量,而且安灯(andon)系统不…...
![](https://img-blog.csdnimg.cn/d5b133cfbd694c98865823ac55daa7a9.png)
Hazel游戏引擎(004)
本人菜鸟,文中若有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/GameEngineLightWeight(中文的注释适合中国人的你) 文章目录前言操作步骤讲解GitHubHazel项目此项目定位项目属性修改Sand…...
![](https://img-blog.csdnimg.cn/f13250e702514a46aba125905b330f85.png)
【CS224W】(task4)图嵌入表示学习
note node2vec: 计算随机游走概率从节点uuu开始模拟rrr条长度为lll的游走链路使用 Stochastic Gradient Descent 优化损失函数 Node2vec在节点分类方面表现更好;而其他方法在链路预测上效果更好,如random walk效率更高;graph emb…...
![](https://img-blog.csdnimg.cn/abddd191e2704bfb83dbe1339cc394cf.jpeg)
分享111个HTML医疗保健模板,总有一款适合您
分享111个HTML医疗保健模板,总有一款适合您 111个HTML医疗保健模板下载链接:https://pan.baidu.com/s/1YInaQDnUVsXYtMh1Ls-BHg?pwdxvfc 提取码:xvfc Python采集代码下载链接:采集代码.zip - 蓝奏云 import os import shuti…...
![](https://img-blog.csdnimg.cn/109e348ab44a45d4a7596965227e87a2.png)
山东大学2022操作系统期末
接力:山东大学2021操作系统期末 2022—2023山东大学计算机操作系统期末考试回忆版 简答题(4 10 points) (1)用户态,核心态是什么 (2)这种区分对现代操作系统的意义 (3)printf(“…...
![](https://img-blog.csdnimg.cn/39cda950084e4e4e892452a774fb1068.png)
Hadoop高可用搭建(一)
目录 创建多台虚拟机 修改计算机名称 快速生效 修改网络信息 重启网络服务 关闭和禁用每台机的防火墙 同步时间 安装ntpdate 定时更新时间 启动定时任务 设置集群中每台机器的/etc/hosts 把hosts拷贝发送到每一台虚拟机 配置免密登陆 将本机的公钥拷贝到要免密登…...
![](https://www.ngui.cc/images/no-images.jpg)
算法 - 剑指Offer 重建二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 解题思路 这题较为复杂, 首先审题,前序遍历规则:根左右, 中序遍历&#x…...
![](https://img-blog.csdnimg.cn/img_convert/0acf61eec275fb974b0eeed43340ef69.webp?x-oss-process=image/format,png)
手写JavaScript常见5种设计模式
想分享的几种设计模式 目前模式:工厂模式,单例模式,适配器模式,装饰者模式,建造者模式 建造者模式 简介:建造者模式(builder pattern)比较简单,它属于创建型模式的一种…...
![](https://www.ngui.cc/images/no-images.jpg)
Python 异步: 当前和正在运行的任务(9)
我们可以反省在 asyncio 事件循环中运行的任务。这可以通过为当前运行的任务和所有正在运行的任务获取一个 asyncio.Task 对象来实现。 1. 如何获取当前任务 我们可以通过 asyncio.current_task() 函数获取当前任务。此函数将为当前正在运行的任务返回一个任务对象。 ... # …...
![](https://img-blog.csdnimg.cn/ecb039596db84d99845e365c5ec092d4.png)
REDIS-雪崩、击穿、穿透
直接发车🚗 一.雪崩 1.触发原因 A.大量缓存数据在同一时间过期(失效) B.redis故障宕机 上述均导致全部请求去访问数据库,导致DB压力骤增,严重则导致数据库宕机/系统宕机 2.应对策略 不同触发原因,应对策略也不一致 应对A&a…...
![](https://img-blog.csdnimg.cn/53b067a114254a96943d7367cd93ce38.png#pic_center)
什么人合适学习Python
发了几天的Python基础,也认识了一些朋友,忽然有人问起,说为啥学Python,或者说啥人学习Python,作为一个教龄8年从Python一线讲师到Python教学主管的我和大家分享一下个人的看法,还是提前说一下,个…...
![](https://img-blog.csdnimg.cn/img_convert/ebdfe6629c54409e222b61ef2f06190b.png)
greenDao的使用文档
介绍:greenDAO 是一款轻量级的 Android ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化, …...
![](https://img-blog.csdnimg.cn/img_convert/2fa369c77d34052e251490c7b1678d5b.png)
基于JAVA+SpringBoot+LayUI+Shiro的仓库管理系统
基于JAVASpringBootLayUIShiro的仓库管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项…...
![](https://img-blog.csdnimg.cn/img_convert/3be3ed4db6f14fc458bf9c633213748a.png)
金三银四面试必看,复盘字节测试开发面试:一次测试负责人岗位面试总结
最近面试了某企业的测试负责人岗位,历经四面,收获蛮多的。 这篇文章,我想聊聊这次面试过程中的一些经历,以及些许经验和教训。 岗位要求 岗位名称:测试负责人 岗位要求:1、扎实的技术以及丰富的技术项目…...
![](https://img-blog.csdnimg.cn/4cc86ddf68644a3e83471eb4f2e53efb.png)
【算法自由之路】 贪心算法
贪心算法 局部最右得到全局最右难点在于如何证明局部最优可以得到全局最优堆 和 排序 是贪心算法最常用的实现算法 贪心算法作为最符合自然智慧的算法,思路是从小部分取最优从而获得最终的最优,但是难得是怎样获取部分最优才能得到全局最优。 有时候我…...
![](https://www.ngui.cc/images/no-images.jpg)
Scratch少儿编程案例-水果忍者-学生作业
专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...
![](https://www.ngui.cc/images/no-images.jpg)
7.Docker Compose
Docker Compose 介绍 Docker Compose是Docker官方编排(Orchestration)项目之一,负责快速的部署分布式应用。其代码目前在https://github.com/docker/compose上开源。Compose 定位是 「定义和运行多个 Docker 容器的应用(Definin…...
![](https://img-blog.csdnimg.cn/img_convert/da0c03da941a4c974f019156bee3c784.png)
GitHub访问问题与 Steam++下载及使用(适合小白)
前言 📜 “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴 目录 前言 一、Steam的介绍 1、大概介绍 2、详细介绍 二、Ste…...
![](https://img-blog.csdnimg.cn/30e7cbafd8014f2fa186dc07bbbac700.png)
Oracle对象——视图之简单视图与视图约束
文章目录什么是视图为什么会使用视图视图语法案例简单视图的创建更改数据基表,视图数据会变化么?更改视图数据,基表数据会变更么?带检查约束的视图结论创建只读视图(MySQL不支持)总结什么是视图 视图是一种…...
![](https://www.ngui.cc/images/no-images.jpg)
SAP模块常用增强总结
MM模块: 采购订单增强: BADI :ME_GUI_PO_CUST ME_PROCESS_PO_CUST 物料凭证增强: BADI:MB_DOCUMENT_BADI USER-EXIT:MBCF0002 实现功能1、当参照预留过帐时,检查填入数量是否小于预留数量 2…...
![](https://img-blog.csdnimg.cn/ac019e255e034969bcd5d74416ad5667.png)
当make执行遇到 Arguments too long
1. 问题 Ubuntu20.04上make编译生成so的时候报错: make[1]:execvp:/bin/sh:Arguments too long对应makefile中的报错位置,仅仅是生成so的时候报错,伪代码如下 ${build_tool} -shared -fpic -o "$" ${OBJ_FILE} ${LDFLAGS}然而如…...
![](https://img-blog.csdnimg.cn/1b48e1bf50c947a0b047dab446f9a23a.png#pic_center)
《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)
1.简介 上一篇文章中,从TestNg的特点我们知道支持变量,那么我们这一篇就通过变量参数来启动不同的浏览器进行自动化测试。那么如何实现同时启动不同的浏览器对脚本进行测试,且听我娓娓道来。 2.项目实战 2.1创建一个TestNg class 1.首先按…...
![](https://img-blog.csdnimg.cn/337f2d45db5c49e09bba4fcbca4e66f2.jpeg)
Maven基础
Maven简介 传统项目: jar包不统一 不兼容 项目中有部分jar包会升级 没升级的部分会起冲突 管理复杂 Maven本质是一个项目管理工具 pom POM Project Object Model 项目对象模型 把项目以对象形式进行管理 先写 pom.xml 的配置文件 代表一个项目 1个项目对应1个po…...
![](https://img-blog.csdnimg.cn/640e2cdea10044ea960f477ca613b438.png)
C++入门:初识类和对象
C入门:类和对象1 本节目录C入门:类和对象11.auto关键字(C11)1.1类型别名思考1.2auto简介typeid运算符:获取类型信息1.3 auto的使用细则1.4auto不能推到的场景2.基于范围的for循环(C11)2.1范围for的语法2.2范围for的使用条件3.指针…...
![](/images/no-images.jpg)
做平面找那些网站找活/网络链接推广
字符串在内存中转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/23/3846517.html...
![](/images/no-images.jpg)
深圳网站托管公司/seo平台怎么样
go-sql-driver包是一个第三方包 下载地址http://github.com/go-sql-driver/mysql 下面直接上代码 package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" )func main() {//连接数据库db, err : sql.Open("mysql&quo…...
![](https://img-blog.csdnimg.cn/img_convert/777be7d48318720c705ec94040d15767.png)
网站制作公司茂名/网站链接交易
文/孙不熟日前,国家发改委等九部委联合发布《关于全力做好2020年春运工作的意见》,我认为有两个重要信息值得关注。一是指出,随着我国城乡、区域发展更加平衡协调,春运迁移人口总量增长放缓,长距离迁移比例…...
![](https://img-blog.csdnimg.cn/20190916212459168.png)
网站建设与优化推广方案模板/中国制造网
论文链接:https://arxiv.org/abs/1903.00241?contextcs简介 对于一个深度神经网络来讲,如何评估该网络本身的预测质量是一个有趣并且有难度的任务。 在实例分割中,实例分类的置信得分被用作掩膜质量评估。然而,使用实例掩膜和实…...
![](/images/no-images.jpg)
工业设计是冷门专业吗/seo推广百度百科
1. font-face是什么? CSS3中的一个模块, 使用它, 我们可以在web应用中使用自己喜欢的字体.2. 基本使用方法 font-face {font-family: yourWebFontName; // 自定义的字体名称src: url(../**/**) format(truetype); // url(...)字体路径 format()见下font-weight:…...
![](/images/no-images.jpg)
dede网站地图不显示文章列表/百度seo 优化
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼{printf("请输入正确日期!/n");goto aaa;}}int LeapYear(int intoYear,int intoMonth,int intoDay)//闰年计算{int today;switch(intoMonth){case 1:today0;break;case 2:today31;break;case 3:today60;break…...