0

嵌入式Python环境

 2 years ago
source link: http://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/embeddable-python-zip-file/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

嵌入式Python环境

2019-05-06

这里将讨论的嵌入式Python环境并不是硬件嵌入式开发的那个嵌入式,如果对Python和硬件感兴趣,推荐micropython.

一直想要一个嵌入式的python环境,最好对环境做的修改(诸如添加第三方包)可以二次分发给用户。

在许多支持自定义功能的软件中,我们经常可以看到嵌入式Python解释器的身影,如GIMPBlender中、Sublime TextThonny

我对这些项目一直饶有兴致,却一直没弄懂它们是怎么做的。以为用了什么高深莫测的打包技术。

昨天,@比老师提交了一个codelab-adapter jupyter插件, 这个插件允许使用codelab-adapter GUI启停jupyter,而jupyter便安装在一个嵌入式Python环境中(实际上是一个ZIP包)。

比老师完全实现了我们之前的目标,我兴奋不已,有了这个工作,codelab-adapter面前无疑打开了一扇崭新的大门。我们之后可以做的东西,一下子变得无限宽广。如果我们能更好地控制环境,入门用户就能少受些苦。@比老师提到构建易用的环境,引用Alan Kay的一句话我非常喜欢:

codelab-adapter的痛点

codelab-adapter一直想要一个灵活可控的Python环境,最好支持用户安装第三方库。由于我们使用Pyinstaller进行跨平台打包(冻结了整个项目),所以打包后的环境无法做到对pip的支持。

目前关于引入第三方Python库的策略,我们倾向使用ZeroMQ来桥接到系统环境。

尽管Thonny展示了很强大的打包技巧,但它几乎是手动来做,我们又不大乐意。

@比老师的工作让我们看到直接使用嵌入式Python环境要轻松很多。

嵌入式Python环境

Python官方社区提供了可用的嵌入式Python环境,此前我一直未曾留意。

目前只提供了Windows系统下的Python环境。(Mac和Linux自带Python!)

Python官方社区提供的自然是CPython的环境,据我所知有些项目在使用PyPy提供的嵌入式环境.

记录下我的一些使用笔记。

下载嵌入式Python环境

我下载了最新的3.7.3版本: python-3.7.3-embed-win32.zip,md5为70df01e7b0c1b7042aabb5a3c1e2fbd5

我选择了32位系统的环境,推荐大家也使用32位的版本,32位的版本可以在64位系统上运行,反之则不行。

安装pip

下载get-pip.py到解压后的目录中:

之后运行:.\python get-pip.py

修改python37._pth:

python37.zip
.

# Uncomment to run site.main() automatically
import site

接下来便可以使用pip安装第三方库了,我们来试试安装jupyterlab:.\python -m pip install jupyterlab -i https://mirrors.aliyun.com/pypi/simple

中途出现一个错误:pyrsistent安装出错. 手动安装pyrsistent: https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyrsistent

.\python -m pip install pyrsistent‑0.15.1‑cp37‑cp37m‑win32.whl

启用jupyterlab:.\python -m jupyterlab

之后分发整个目录即可!

更专业地分发

直接把ZIP包交给用户看起来似乎不是很专业,可以使用pynsist将其打包为可安装文件。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK