有没有办法创建一个只运行 Python 的服务器,最精简的方式是什么?
source link: https://www.v2ex.com/t/831269
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.
有几个服务器,目前都是用的 debian+python 的形式。 但实际上我仅仅只需要运行 python 。
想问一下有没有办法搭建一个纯 python 服务器,就像云函数一样。或者是最精简的 python 服务器是什么?
云函数其实挺好,就是有一些限制不像服务器上面方便。所以问问各位大神有没有更好的搭建方法。
adoal 22 小时 14 分钟前
咱就不提操作系统作为一个管理硬件的抽象层很难去掉。就说在操作系统里运行的程序,也许你写业务代码只直接用到 Python ,但用的功能模块还要依赖各种 C 库,所以 pip 之外的 C 库包管理也是必要的。
winzkh 22 小时 11 分钟前
ClericPy 22 小时 5 分钟前
docker 可以么, alpine 简陋的我都不想用...
Serverless 哪不太好呢, 无状态出错概率小啊, 如果不喜欢, 以前用过 heroku 也是有点类似免运维的体验
nuitka 把你 python 程序打包成 .so ?
还是没太看懂需求
ERRASYNCTYPE 22 小时 3 分钟前
illl 22 小时 0 分钟前 via iPhone 1
huangsen365 21 小时 57 分钟前 via iPhone 2
markgor 21 小时 56 分钟前 6
pugaizai 21 小时 53 分钟前
有没有直接就是 “python==操作系统” 这样的软件存在,可以执行 python 程序的最简单架构
markgor 21 小时 48 分钟前
不开玩笑了,
Python 无法取代系统,底层的调用还是依赖系统的库。
而你用云函数那种,属于一堆主机(装了操作系统的)运行代码时通过 docker 创建个环境执行,所以一般都有冷启动问题,再深入的我就不知道了。
momocraft 21 小时 47 分钟前
lvsemi1 21 小时 46 分钟前
pugaizai 21 小时 44 分钟前
This image is based on Alpine Linux image, which is only a 5MB image, and contains Python 3.8.
This image is only 63MB on disk.
adoal 21 小时 38 分钟前 6
要么你用 MicroPython 的单片机,不过那玩意不论是性能还是生态应该都不是你想要的东西。
你可能不是科班出身,对计算机系统的理解有问题。操作系统这玩意,从业务角度是看不到也不需要的,但如果没有它,你自己要做的事就太多了。正是因为信息系统的分层架构模式,才能让写业务的人专心写业务不用关注底层技术实现。如果没有操作系统,又想运行 Python ,那 Python 解释器的实现者可能要自己去处理各种硬件的底层操作,而且还要适配各种硬件。你轻轻祭起你认为“只要……就好”的 Python 写出业务代码“岁月静好”,但代价是底层的 C 库、操作系统在“负重前行”处理了让人望而生畏的肮脏细节。
其实这是一个 X-Y 问题,你提出的“只需要运行 Python”并不是真正的需求,不如讲一下为什么不想要操作系统……如果是嫌运行在正常的 Linux 发行版里体积大的话,那就可以用轻量级的发行版,实在不行还可以自己做裁剪(尽管以你的知识水平和经验目前这个做法不现实)。但是操作系统的基础组件是逃不掉的,很多 Python 包依赖的下层 C 库也是逃不掉的。
adoal 21 小时 34 分钟前
also24 21 小时 32 分钟前 2
事实上 python 确实可以脱离操作系统来使用(也可以理解为自己接管了一部分操作系统的工作)
比如说,这个 7 年前的视频 :
Josh Triplett - Porting Python to run without an OS - PyCon 2015
zsj950618 21 小时 27 分钟前 via Android
Privileges 21 小时 27 分钟前
docker 拉个 Python-Alpine 最小镜像不就能解决了吗,没有操作系统怎么运行 Python 怎么装依赖环境?
44670 21 小时 23 分钟前
also24 21 小时 21 分钟前 2
但是从原理,或者说结构上来说,这确实说明了 Python 是具备甩开操作系统,独立运行的能力的,而非很多人认为的如同空中楼阁一般从原理上就不可能。
实际上,有很多基于相应原理的具体应用,比如:
19 楼提到的 MicroPython https://micropython.org/
类似的 PiPyOS https://github.com/rreilink/PiPyOS
包括其它语言,也是有类似操作的,例如:
Go 的 AtmanOS https://atmanos.org/
Java 的 Java On Everything https://github.com/joekoolade/JOE
whileFalse 21 小时 20 分钟前
also24 21 小时 18 分钟前
codehz 21 小时 17 分钟前
不过 rootfs 还是得靠自己提供
huangsen365 21 小时 12 分钟前 via iPhone
Privileges 21 小时 8 分钟前
pugaizai 21 小时 5 分钟前
最大的问题是因为,每次配置新服务器,都要通过各种百度、google 一顿操作。到最后,仅仅只是为了安装一个 20 多 Mb 的 pyhton3 而已。
就面临几个问题。
比如 debian 默认版本 python2 ,自带 python3 版本也很低。就需要很多操作才能换成高版本 python3 ,而且 python2 各种程序还在后台持续运行不能删除(不一定对)。
另外安装这些 debian 操作系统,防火墙及其他各种漏洞,知识有效不甚了解。操作系统很多无用的程序占用资源不说,出现漏洞被挂了马也难以判断和监测。
arischow 20 小时 53 分钟前 via iPhone
liuxu 20 小时 46 分钟前 via Android
adoal 20 小时 42 分钟前
另外,Debian 11 里带的 Python 3 是 3.9 版,不算低了吧。
adoal 20 小时 41 分钟前 1
XiLingHost 20 小时 14 分钟前
luckyrayyy 20 小时 8 分钟前 via iPhone
duzhor 20 小时 5 分钟前
wonderblank 20 小时 1 分钟前 2
首先,我们允许的程序基本上都依赖于操作系统,操作系统和硬件给我们管理内存,磁盘,中断等。脱离了操作系统,应用程序很难跑起来,因为没有环境。
那么,有没有一种操作系统,这个操作系统就是我们写的程序,不依赖于任何其他的依赖?
有的,关键词是 "Unikernel"
楼主可以看看 MirageOS https://mirage.io/
dzdh 19 小时 58 分钟前
time 留着 什么 sh bash build 包 一个都不要有
krcalc 19 小时 57 分钟前
learningman 19 小时 55 分钟前 via Android
还是推荐用 python-slim
newmlp 19 小时 53 分钟前
Buges 19 小时 50 分钟前 via Android
jstony 19 小时 49 分钟前
ETiV 19 小时 38 分钟前 via iPhone
既然是 VM ,那有没有可能让 Bytecode 运行在某个实体机上面😂
ddzzhen 19 小时 30 分钟前 via Android
gengchun 19 小时 4 分钟前 1
所以我说,我折腾这个,就是自己造的伪需求,除了证明自己聪明外,提升一下自己的安全感以外,没有任何意义。
真要折腾这个,除了学术层面,唯一的可能就是嵌入式项目,或者航天航空有特殊需求。OP 大概率是自己看着几个 G 的虚拟机镜像觉得不顺眼而已。
neoblackcap 18 小时 53 分钟前
neoblackcap 18 小时 51 分钟前
dick20cm 18 小时 47 分钟前
Rheinmetal 18 小时 46 分钟前
anxn 18 小时 39 分钟前
pugaizai 18 小时 27 分钟前
像 os 一样运行的 micropython 、PiPyOS 考虑到性能和兼容性估计暂时还不够水平去尝试。
跨平台运行:MirageOS 貌似可以,介绍需要 OCaml 这个语言去编写。
精简版系统:有大神说的 buildroot 可以自己打包一个 python 精简版系统,这个估计算是最小的了。
或者使用 Alpine 这种比 debian 还小的系统
也可以用工具打包:python 转.so/exe 部署
还可以采用 docker 模式
底层 Linux 内核,选择 coreos|Photon OS|RancherOS 专用 /带有 docker 的操作系统
中间用 docker
最后选择 Alpine/Distroless/Busybox 这种比较小的容器
总体看来考虑到大小,兼容,效率,方便,安全,和可移植性
感觉就是我需要打电话而已,但是要安装一个“Android 系统”,而我的 “拨号.apk”只有 500kb
希望以后服务器,也能单独容器化吧,php 就是 php ,java 就是 java ,mysql 就是 mysql 。
不再是买了一个 20 吨的大卡车,只为能载一个人,而这个人只为了吹吹风。
shayuvpn0001 18 小时 17 分钟前
ziseyinzi 18 小时 11 分钟前
zhaiblog 18 小时 6 分钟前 via iPhone
marquina 18 小时 3 分钟前
好奇问下,你的希望是手机不需要安装 Andorid 就能运行你的“拨号.apk”吗……
Chad0000 17 小时 57 分钟前
ipwx 17 小时 52 分钟前
但是当你逐渐完善以后会发现,你把现有的那一套都重新做了一遍。。。
cs8425 17 小时 47 分钟前 via Android
但很多東西都要自己重寫 /port 一次
38 樓提到的
cs8425 17 小时 40 分钟前
...手机板也太难回覆
选个字 莫名其妙又送出了= =
希望可以改善一下
19 楼提到的 MicroPython 可行
但很多东西都要自己重写 /port 一次
38 楼提到的 Unikernel 不只 MirageOS
github 上有一些清单可以参考:
https://github.com/cetic/unikernels#comparing-solutions
https://github.com/infoslack/awesome-unikernels
flynaj 17 小时 1 分钟前 via Android
darksheep9527 16 小时 39 分钟前
pengtdyd 16 小时 35 分钟前
pugaizai 15 小时 8 分钟前
才发现 docker 对我这个纯 python 项目完全是鸡肋,docker 应该更适合复杂的环境,或者更大规模集群应用。
环境:linux 架构的全部都可以安装 python3 并且胶水语言不存在兼容性问题。
容器:还有两个服务器都一直空着,隔离环境新开一个服务器就行了。
维护:自己搞了一个网页版的工具。文件管理,window 开发完,删除更新一键就搞定了,还能实时测试。
移植:所以 python 文件一键打包上传到新服务器就行了。
这 docker ,维护运行,虚拟机就够麻烦了,还在虚拟机里面再搞个容器。更新镜像,安装新 pip 包卸载 pip 包还要重新打包镜像部署。。。。
一顿操作下来,本意是看看有没有骑在自行车上吹风的方式。结果感觉不仅是买了个 40 吨卡车,还在卡车上面修了一个阳台,站在阳台上面吹风。。。
adoal 13 小时 49 分钟前
作为一个从互联网时代之前走过来的甲方老运维,见过太多只想用主流的工程型编程语言写业务功能、当一个“纯程序员”而避开运维、安全、数据库等关联知识的人了。然而,除非是有一个完整的大团队,纯程避开了的这些事有专业角色来承担,否则,在大多数小团队里程序员多少也都要承担一些的,没有真正的纯程。
还是抽空静下心来循序渐进了解一些运维知识吧。至少,知道生产环境下的要求除了要用编程语言正确实现业务功能之外,还有很多其他靠考虑的东西。稍微学一些,反过来也对你的开发有帮助。运维看起来知识点多且杂乱,难以速成,但没有什么太大的难点,慢慢攒经验也好的。
当然,云服务商的 PaaS 、application engine 以致 serverless 之类的确是解决你痛点的好办法。但是你自己也清楚,这些好东西也各有其应用场景和限制,不一定总是适用。
felixcode 13 小时 40 分钟前 via Android
你是不是非得用 debian stable 版又觉得版本旧啊?
adoal 13 小时 27 分钟前
hronro 13 小时 22 分钟前
msg7086 12 小时 21 分钟前
比如说,什么是操作系统。
拿 Linux 系统来举例,简简单单可以分解成这些东西:
1. Linux 内核,或者说 Linux 。
2. 核心类库,比如 libc6 之类。
3. 用户空间工具,比如 bash init top 之类。
4. 用户空间类库,比如 libreadline ,libncurse 之类。
那么首先 Linux 内核肯定是要的,否则硬盘网络都没法用了。
然后是 libc6 之类的也是要的,否则就没法和内核通信了,自然硬盘网络都没法用了。
用户工具这些不直接影响使用的东西,的确可以不装。
用户空间类库还是要的,很多都是 python 直接依赖的库,没这些库的话 python 就跑不起来了。
所以这么多东西里,你只能拿掉这些用不到的小工具。
这种时候就是 docker 的专长了,可以很方便地定制裁剪操作系统的用户空间软件。
darkengine 12 小时 4 分钟前
eason1874 11 小时 46 分钟前
你找一个简易系统去跑 Python 可以,但是会受到很多限制。哪天你要用到的库需要调用主流系统都内置的软件,而你的简易系统没有,你就要去安装,安装不了你就用不上
觉得版本管理麻烦就上 docker 吧。生产环境关键是可靠,兼容性好,不值得为一点计算资源去牺牲这两点
FrankHB 10 小时 29 分钟前
真正的问题是一些关键功能(比如 built-in module os )就是为了去利明确用不属于 Python 实现维护的外部操作系统去设计的,spec 都没怎么抽象而是直接暴露底层系统的语义,所以没外部操作系统支持的实现默认就是残的,跟“只能运行”直接矛盾。
FrankHB 9 小时 59 分钟前
对一个有 spec 的完整的语言来说,spec 中的 conformance rules 指定了实现在语言意义上确保能“正常工作”(不符合预期就是实现的 bug )。
典型地,如 C 这样的语言可能明确支持所谓的独立实现(freestanding implementation) ,和依赖外部环境的宿主实现(hosted implementation) ,而宿主一般意义上就是所谓的操作系统。这两类实现都实际可用。
另外,早期的语言实现直接是有没操作系统的实际实例来当作参考实现的,那自然也算能“正常工作”。
Python 官方并没有拿没有操作系统的实现来当参考实现,在 spec 的意义上也没有明确的定义,它的事实标准是 CPython 这个实现以及相关的文档,最接近的大概是 The Python Language Reference 。所以这里就有很大的用户自己主观想像的空间——除了 CPython ,和 CPython 实现多大才能算一个真正意义上的 Python 的实现?
就现实来讲,如果一个 CPython 外的实现在某个配置中能支持 CPython 支持的所有公开特性,做到 drop-in replacement ,那能算一个 Python 实现,不太会有什么疑问。否则,具体要有不兼容能容忍多少,得看用户场景。对需要依赖这些不被兼容特性的用户,所谓的“正常工作”可能就没什么意义了。
要说实现原理,唯一可能做到的就是自带模拟 CPython 实现中所有依赖操作系统的功能。有些名义上依赖操作系统的功能,像文件系统,实际上典型的独立实现照样可以实现。例如,MicroPython 提供了 os 模块的模拟( https://docs.micropython.org/en/latest/library/os.html )。但是这种实现的完整性是成问题的:MicroPython 就明确只提供了一个子集。
PiPyOS 可能确实比较符合原始要求;但它自带 CPython 和 OS 组件作为一部分,说这是一个 Python 实现,倒不如说是个集成 Python 运行时和自定义“驱动”及其 Python 绑定的 ChibiOS 发行版。
所以较真的话,想要“脱离操作系统的 Python 实现”,现在应该没有;以后也不大可能会有。
seanzxx 9 小时 7 分钟前
lambda:最简单的 serverless 实现,有 15 分钟运行限制
beantalk:直接部署代码,基础设施 aws 帮你完成,常用于 web app
ecs:自动管理的 docker 环境,自动创建主机,部署你的 image ,自动设置各种外部服务,比如 LB
觉得 docker 麻烦是你不熟悉,
docker 最大的优点是保证你的代码在不同的地方部署都能得到一样的结果
一般会有一个 CI 服务器,比如常用的 jenkins 或者 aws code pipeline
你的代码提交到 git ,CI 就自动打包,自动部署,自动测试
你其实就只关心你的代码,本地测试好,提交代码
剩下的事情 CI 和 Docker 就可以帮你搞定了
Chad0000 8 小时 51 分钟前 via iPhone
你有 docker 的话超级简单,甚至建议了解一下 K8S ,我现在直接本地开发然后部署到 K8S 里面。我的 elastic search ,日志中间件都部署在上面,迁移到话就是一个配置文件而已。
gengchun 5 小时 39 分钟前
gbw1992 3 小时 11 分钟前
我大概理解题主的意思了,我只是运行几个 python 的简单函数,但是却要安装庞大的系统。
我突然想起来我们之前的项目,只是跑两三个容器的项目,居然研究起来 k8s ?
我只想过个河而已,你把航空母舰的图纸拿给我干啥?
但是题主你想过没有,你在 python 一句话访问一个 http 请求,其实背后有多少的依赖?
其实都是操作系统帮你做了,你有种子想种菜,但是你不能离开土地呀。
还有 docker 这些都是帮助你工程化的工具。就像是你想不用土地种菜,但是你得掌握无土化栽培技术。
我感觉更适合题主的是云服务商的函数引擎服务,代码贴在编辑器里直接点运行就跑起来。
zjddp 2 小时 31 分钟前
或者 op 能模仿“吹风”把你的实际需求简单明了地说一下吗?
yangyaofei 1 小时 39 分钟前
ety001 1 小时 19 分钟前
arischow 1 小时 14 分钟前
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK