利用content内容共享接口来减少python应用的大小

原创 2017年03月01日 09:48:19

我们在先前的文章“利用ubuntu-app-platform提供的platform接口来减小Qt应用大小”已经了解到如何运用platform interface来减小Qt应用的大小。这里面的实现原理就是利用content分享来实现的。在今天的教程中,我们来运用一个开发者自己开发的python的interpreter snap安装包来实现同样的东西。对于一些系统来说,如果想要用最新的python版本,或者是想让很多的python应用都使用同一个python的安装,而不用分别把python的环境打入到每一个snap应用的包中,我们可以采用今天使用的方法。

这个python interpreter的snap应用的整个源码在:

https://github.com/jhenstridge/python-snap-pkg

我们可以通过如下的方式来得到:

$ git clone https://github.com/jhenstridge/python-snap-pkg


整个项目的源码如下:

$ tree -L 3
.
├── examples
│   └── hello-world
│       ├── hello.py
│       ├── hello.sh
│       └── snap
├── README.md
├── snap
│   └── snapcraft.yaml
└── src
    └── sitecustomize.py

在上面的snap目录中就是描述如何把python通过content sharing interface分享出去以供其它的开发者使用。开发者已经把编译好的snap上传到我们的商店了。我们可以通过如下的方式来进行安装:

$  snap install --edge python36-jamesh

我们可以到examples/hello-world目录下直接打入如下的命令:

$ snapcraft 
Preparing to pull hello-world 
Pulling hello-world 
Preparing to build hello-world 
Building hello-world 
Staging hello-world 
Priming hello-world 
Snapping 'hello-world' |                                                             
Snapped hello-world_0.1_all.snap

我们可以看到生产的.snap文件。我们可以使用如下的命令:

$ sudo snap install --dangerous hello-world_0.1_all.snap

来安装这个应用。并使用如下的命令来进行连接和运行:

$ snap connect hello-world:python3 python36-jamesh:python3
$ hello-world
Hello world!

我们可以看到我们的hello-world应用被成功运行。

hello.py

print("Hello world!")

我们可以检查一下我们最后的hello-world_0.1_all.snap文件大小:

$ ls -alh
total 28K
drwxrwxr-x 3 liuxg liuxg 4.0K 3月   1 09:45 .
drwxrwxr-x 3 liuxg liuxg 4.0K 3月   1 09:19 ..
-rw-rw-r-- 1 liuxg liuxg   28 3月   1 09:19 .gitignore
-rw-rw-r-- 1 liuxg liuxg   22 3月   1 09:19 hello.py
-rwxrwxr-x 1 liuxg liuxg   60 3月   1 09:19 hello.sh
-rw-r--r-- 1 liuxg liuxg 4.0K 3月   1 09:39 hello-world_0.1_all.snap
drwxrwxr-x 2 liuxg liuxg 4.0K 3月   1 09:23 snap

整个的.snap文件只有小小的4k大小。这比较以前的那种方法,显然这种通过content sharing的方法能够大大减少我们的python应用的大小。当然这个共享的python包也可以为其它的python应用所使用。

你甚至可以通过如下的方式来安装自己喜欢的pip包:

$ python36-jamesh.pip3 install --user django

这个django包的内容将会被安装到 python36-jamesh包里的$SNAP_USER_COMMON目录之中





版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Android-SharesPreferences接口

获取SharedPreferences的方式有以下两种:1 调用Context对象的getSharedPreferences()方法 2 调用Activity对象的getPreferences()方...

第二章 Building App with Content Sharing

本章是 Google Developer Training 的第二章,主要讲解了应用程序间数据共享方式,包含如下内容: Sharing Simple Data Sharing Files Sha...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

android apk 减小apk的大小

因为推广的需要,公司需要把APK的大小再“减小”一下,4M以内! 当达到4M以内之后,公司建议说,能否再压压?2M如何? 瘦身前 因为平时就考虑到大小的限制,所以很多工作已经做过了,...

再谈osg场景中的树(3dmax建模)

上次只是说了下osg场景中用怎样的树比较好,说到了一些解决方案也只是一笔带过,所以今天给补上。 如果您和我一样的苦逼,用的是3dmax建的场景,然后场景又比较大,树木又比较多。那就意味着树木和地形,...

减少.NET应用程序内存占用经验分享

最近一周比较忙,主要的工作内容是在做一个叫“键盘精灵”的东西,简单来讲就是将很多数据放到内存中,对这些数据进行快速检索,然后找出根据输入条件最匹配的10条记录并予以展示。具体和下面两款炒股软件的相关功...

减少使用Java应用服务器,迎接Docker容器

【编者的话】随着Docker的发展,越来越多的应用开发者开始使用Docker。James Strachan写了一篇有关Java开发者如何使用Docker进行轻量级快速开发的文章。他告诉我们,使用Doc...

接口interface的应用和工厂方法模式

工厂方法模式 有多个功能需要使用打印机的功能,在之后的时间有可能会添加新的打印机,为了避免大量的重复代码的大量修改,将重复代码写在一个函数中,方便修改 实例如下: 1、创建一个打印的接口 in...

采用Content Provider(内容提供者)对外共享数据

(1)、内容提供者作为安卓系统中的一个重要组件,需要在清单文件中进行配置。 (2)、作用是对外共享数据使用,可以使用它将你应用中的数据对外进行数据共享,可以进行增删改查。 (3)、可以讲任意类型数...

使用Runnable接口实现资源共享的一些心得

程序的功能就是简单的对一份公共文件实现共享。程序采用的是卖票的形式来演示整个过程。 程序的整体实现 class MyThread implements Runnable{ private...

其他网站和应用的Python接口API

Welcome to Python API.com Select API / Python wrapper from the list Alexa Web Web traff...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)