惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
博客园_首页
宝玉的分享
宝玉的分享
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
T
Tailwind CSS Blog
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
罗磊的独立博客
F
Fortinet All Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 聂微东
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
阮一峰的网络日志
阮一峰的网络日志
I
InfoQ
Simon Willison's Weblog
Simon Willison's Weblog
D
DataBreaches.Net
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Scott Helme
Scott Helme
B
Blog
M
MIT News - Artificial intelligence
K
Kaspersky official blog
H
Help Net Security
V
Vulnerabilities – Threatpost
C
CXSECURITY Database RSS Feed - CXSecurity.com
Engineering at Meta
Engineering at Meta
博客园 - 【当耐特】
L
Lohrmann on Cybersecurity
P
Privacy & Cybersecurity Law Blog
Project Zero
Project Zero
The Hacker News
The Hacker News
B
Blog RSS Feed
T
Tor Project blog

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
嵌入式Python环境
种瓜 · 2019-05-06 · via 夜行人

文章目录

缘起

这里将讨论的嵌入式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环境,此前我一直未曾留意。

目前只提供了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:

1
2
3
4
5
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将其打包为可安装文件。