当前位置: 首页 > news >正文

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 代码的几种方式 )

相关文章:

python的disutils创建分发包

python中的distutils包主要用创建共享包,安装包,在平时安装python模块的时候,使用的命令如下: python setup.py install 其实以上代码就是distuitls包提供的功能,直接使用setup.py来进行安装一个包,在用这种…...

【洛谷】P1195 口袋的天空

明显看出为最小生成树,那么:难点在哪里呢?if(cntn-k)//******{flag1;break;}为什么是cntn-k呢而不是k呢?!!!解释:(如果每个已经连在一起了就不能分开,不管多少…...

JavaScript高级程序设计读书分享之3章——3.5操作符

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 目录 操作符 一元操作符 递增/递减操作符 一元加和减 布尔操作符 逻辑非 逻辑与 逻辑或 乘性操作符 乘法操作符 除法操作符 取模操作符 加性操作符 加法操作符 减法操作符 关系操作符 相等操…...

moveToCoordinateF3DconcatenateRotations

moveToCoordinate 演示视频: 注意:前提是3~6轴机器人机构且不是PickAndPlace 该方法_3D。Poses.moveToCoordinate 移动由 指定的对象,该对象 对应于支持的机器人配置之一,只要标识的机器人配置支持,其第一个动画指向指定坐标和指定旋转。这无需您定义姿势即可工作。 工…...

多线程面试题开胃菜6(5道)

一、Fork/Join 框架是干什么的?大任务自动分散小任务,并发执行,合并小任务结果。二、线程数过多会造成什么异常?线程过多会造成栈溢出,也有可能会造成堆异常。三、说说线程安全的和不安全的集合。Java 中平时用的最多的…...

植物大战 List——C++

这里写目录标题vector和stirng的细节对于stringlist的使用list的迭代器反向迭代器构造函数关于list::sort的排序uniquelist的底层模拟实现结点类的实现迭代器模拟实现list实现插入的实现迭代器失效inserterase析构函数拷贝构造赋值构造函数vector和stirng的细节 复习vector的深…...

安灯(andon)系统是车间现场管理的必备工具

安灯(andon)系统应用越来越广泛,不单单局限于汽车行业,更多生产型企业意识到了提高工作效率的重要性,提高工作效率根本的能提高生产水平,提高产量,而且安灯(andon)系统不…...

Hazel游戏引擎(004)

本人菜鸟,文中若有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/GameEngineLightWeight(中文的注释适合中国人的你) 文章目录前言操作步骤讲解GitHubHazel项目此项目定位项目属性修改Sand…...

【CS224W】(task4)图嵌入表示学习

note node2vec: 计算随机游走概率从节点uuu开始模拟rrr条长度为lll的游走链路使用 Stochastic Gradient Descent 优化损失函数 Node2vec在节点分类方面表现更好;而其他方法在链路预测上效果更好,如random walk效率更高;graph emb…...

分享111个HTML医疗保健模板,总有一款适合您

分享111个HTML医疗保健模板,总有一款适合您 111个HTML医疗保健模板下载链接:https://pan.baidu.com/s/1YInaQDnUVsXYtMh1Ls-BHg?pwdxvfc 提取码:xvfc Python采集代码下载链接:采集代码.zip - 蓝奏云 import os import shuti…...

山东大学2022操作系统期末

接力:山东大学2021操作系统期末 2022—2023山东大学计算机操作系统期末考试回忆版 简答题(4 10 points) (1)用户态,核心态是什么 (2)这种区分对现代操作系统的意义 (3)printf(“…...

Hadoop高可用搭建(一)

目录 创建多台虚拟机 修改计算机名称 快速生效 修改网络信息 重启网络服务 关闭和禁用每台机的防火墙 同步时间 安装ntpdate 定时更新时间 启动定时任务 设置集群中每台机器的/etc/hosts 把hosts拷贝发送到每一台虚拟机 配置免密登陆 将本机的公钥拷贝到要免密登…...

算法 - 剑指Offer 重建二叉树

题目 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 解题思路 这题较为复杂, 首先审题,前序遍历规则:根左右, 中序遍历&#x…...

手写JavaScript常见5种设计模式

想分享的几种设计模式 目前模式:工厂模式,单例模式,适配器模式,装饰者模式,建造者模式 建造者模式 简介:建造者模式(builder pattern)比较简单,它属于创建型模式的一种…...

Python 异步: 当前和正在运行的任务(9)

我们可以反省在 asyncio 事件循环中运行的任务。这可以通过为当前运行的任务和所有正在运行的任务获取一个 asyncio.Task 对象来实现。 1. 如何获取当前任务 我们可以通过 asyncio.current_task() 函数获取当前任务。此函数将为当前正在运行的任务返回一个任务对象。 ... # …...

REDIS-雪崩、击穿、穿透

直接发车🚗 一.雪崩 1.触发原因 A.大量缓存数据在同一时间过期(失效) B.redis故障宕机 上述均导致全部请求去访问数据库,导致DB压力骤增,严重则导致数据库宕机/系统宕机 2.应对策略 不同触发原因,应对策略也不一致 应对A&a…...

什么人合适学习Python

发了几天的Python基础,也认识了一些朋友,忽然有人问起,说为啥学Python,或者说啥人学习Python,作为一个教龄8年从Python一线讲师到Python教学主管的我和大家分享一下个人的看法,还是提前说一下,个…...

greenDao的使用文档

介绍:greenDAO 是一款轻量级的 Android ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,greenDAO 针对 Android 进行了高度优化, …...

基于JAVA+SpringBoot+LayUI+Shiro的仓库管理系统

基于JAVASpringBootLayUIShiro的仓库管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项…...

金三银四面试必看,复盘字节测试开发面试:一次测试负责人岗位面试总结

最近面试了某企业的测试负责人岗位,历经四面,收获蛮多的。 这篇文章,我想聊聊这次面试过程中的一些经历,以及些许经验和教训。 岗位要求 岗位名称:测试负责人 岗位要求:1、扎实的技术以及丰富的技术项目…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...