利用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目录之中





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

相关文章推荐

如何利用content接口在Ubuntu Core应用之间互相分享数据

我们在先前的文章"利用ubuntu-app-platform提供的platform接口来减小Qt应用大小"已经感受到分享另外一个应用的库的好处.它可以使得我们利用另外一个应用提供的共享库从而使得我们的...

Android入门——内容提供者Content Provider详解与应用

引言在Android 中,内容提供者Content Provider提供了对内容和外部数据进行增删改查的功能,应用程序可以通过内容提供者来访问其他应用程序的数据,作为内容提供者也可以成为内容提供者向其...

CSS content内容生成技术以及应用

by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=739 一、哗...
  • Sheendn
  • Sheendn
  • 2014年05月13日 15:16
  • 543

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

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

Android应用程序组件Content Provider的共享数据更新通知机制分析

在Android系统中,应用程序组件Content Provider为不同的应用程序实现数据共享提供了基础设施,它主要通过Binder进程间通信机制和匿名共享内存机制来实现的。关于数据共享的另一个话题...

Android Content Provider在应用程序之间共享数据的原理分析

本文参考Android应用程序组件Content Provider在应用程序之间共享数据的原理分析http://blog.csdn.net/luoshengyang/article/details/6...
  • jltxgcy
  • jltxgcy
  • 2014年07月14日 09:36
  • 1514

收藏-------------Android应用程序组件Content Provider的共享数据更新通知机制分析

Android应用程序组件Content Provider的共享数据更新通知机制分析 分类: Android2011-12-12 00:58 5518人阅读 评论(25) 收藏 举报 ...
  • zbl_zbl
  • zbl_zbl
  • 2012年07月16日 18:52
  • 1280

Content Provider(二)之 FileProvider 实现应用文件共享

由于Android的安全机制 ,一个进程默认不能影响另外一个进程的,如读取私有数据 。 那么对于进程间的文件的共享 ,出于安全考虑,用FileProvider。FileProvider会基于manif...

Content Provider实现跨应用数据库共享

ContentProvider
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用content内容共享接口来减少python应用的大小
举报原因:
原因补充:

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