摘要:不知道你们是否注意到,通过这个命令安装库后,也会自动生成对应的文件。但是通过程序或者显示安装已安装文件就会发现,包中只包含了文件,并没有包含文件。也就是说,在包安装时,在脚本执行过程中堆刚安装的脚本进行了编译,生成了文件。
问题
使用Ubuntu系统或者其他基于deb包管理器系统的人,经常通过apt-get install命令来安装Python的库。不知道你们是否注意到,通过这个命令安装Python库后,也会自动生成对应的.pyc文件。但是通过synaptic程序或者dpkg -L package-name显示安装已安装文件就会发现,deb包中只包含了.py文件,并没有包含.pyc文件。那么这些.pyc文件是从哪里来的呢?
答案我们以python3-bs4包为例来说明。如果你安装过这个包,那么你可能可以从系统的/var/cache/apt/archives中找到python3-bs4*.deb文件。如果找不到,你可以用下面的命令下载一个:
apt-get download python3-bs4
下载后,使用系统自带的Archive Manager打开这个这个deb文件来查看内容,如下图所示:
其中,要安装的文件是usr目录,安装包的元信息在DEBIAN目录下。我们进入到DEBIAN目录下来看看:
从上图可以看出,这里免包含了deb包的很多控制文件,我们要关注的是postinst这个文件,这个文件是安装完包的内容之后要执行的脚本,来看下内容:
postinst文件就是一个shell脚本,主要工作是执行py3compile这个命令,该命令是一个Python脚本,专门用于在安装deb包格式的Python库的过程中生成对应的.pyc文件。也就是说,在deb包安装时,在post-install-script脚本执行过程中堆刚安装的Python脚本进行了编译,生成了.pyc文件。
deb包的内容也可以通过如下命令来查看,这里直接给出示例:
~/tmp/deb$ ls python3-bs4_4.3.2-1ubuntu1_all.deb ~/tmp/deb$ ar vx python3-bs4_4.3.2-1ubuntu1_all.deb x - debian-binary x - control.tar.gz x - data.tar.xz ~/tmp/deb$ ll total 128 -rw-r--r-- 1 diabloneo diabloneo 1709 Dec 17 22:21 control.tar.gz -rw-r--r-- 1 diabloneo diabloneo 58368 Dec 17 22:21 data.tar.xz -rw-r--r-- 1 diabloneo diabloneo 4 Dec 17 22:21 debian-binary -rw-rw-r-- 1 diabloneo diabloneo 60270 Jun 5 2014 python3-bs4_4.3.2-1ubuntu1_all.deb ~/tmp/deb$ tar -tf control.tar.gz ./ ./postinst ./prerm ./md5sums ./control
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/45317.html
摘要:打包成单文件所使用的命令为打包成文件夹所使用的命令为不管是哪种打包方式都会留下一个文件。这样我们只需将脚本文件和脚本文件放置到同一文件夹下,运行我们的脚本。可以看到已经完美的反编译出其中的脚本好了,相信大家已经明白了反编译的原理。 近期阅读了一篇很感兴趣的文章,为免后续文章被删无法再阅读,现...
摘要:浅析参数说明对于所有列表里提到的纯模块做处理需要在脚本里有一个包名到目录的映射。阐明包名到目录的映射,见键代表了包的名字,空的包名则代表不在任何包中的顶层包。最终会在下生成可执行文件,调用制定的函数实例分析 python setup.py 浅析 setuptools.setup() 参数说明 packages 对于所有 packages 列表里提到的纯 Python 模块做处理 需要...
摘要:找到模块文件之后,将其编译成字节码,就是那个文件里面的关于字节码,下面会介绍,请继续阅读。当然,如果根本就没有找到同名的源文件,只有字节码文件,那么就只能运行这个了。执行就是前面已经编译的模块字节码文件,顺理成章要执行了。 不管是用import还是用from mmmm import *的方式导入模块,当程序运行之后,回头在看那个存储着mmmm.py文件的目录中(关于mmmm.py文件可...
摘要:是回调函数,当链接服务器和相应数据传输完毕时触发本函数可选。仅仅是针对的,在中,已经没有这个模块了,取代它的是。由于以流式读取文件,从而速度较快,切少占用内存,但是操作上稍复杂,需要用户实现回调函数。 编写模块 模块是程序 模块就是一个扩展名为.py的Python程序。 编写模块 #!/usr/bin/env python # coding=utf-8 lang = python 引...
Python在什么时候会生成pyc文件呢? 事情大概是这样的,之前我一直以为python文件在执行过之后就会生成pyc文件,后来一次偶然情况下,发现还是自己too young too simple,在看过其他大神文章并且自己验证之后,发现还是有点意思的,权当没事写点文章吧。 什么是pyc文件呢? 简单来说,pyc文件就是Python的字节码文件,我们都知道Python是一种全平台的解释性语...
阅读 2183·2023-04-25 19:06
阅读 1382·2021-11-17 09:33
阅读 1769·2019-08-30 15:53
阅读 2587·2019-08-30 14:20
阅读 3546·2019-08-29 12:58
阅读 3539·2019-08-26 13:27
阅读 504·2019-08-26 12:23
阅读 487·2019-08-26 12:22