有没有办法创建一个只运行 Python 的服务器,最精简的方式是什么?

2022-01-29 14:12:15 +08:00
 pugaizai

有几个服务器,目前都是用的 debian+python 的形式。 但实际上我仅仅只需要运行 python 。

想问一下有没有办法搭建一个纯 python 服务器,就像云函数一样。或者是最精简的 python 服务器是什么?

云函数其实挺好,就是有一些限制不像服务器上面方便。所以问问各位大神有没有更好的搭建方法。
10337 次点击
所在节点    Python
98 条回复
ktqFDx9m2Bvfq3y4
2022-01-29 18:38:55 +08:00
强烈建议用 Docker ,我现在做项目都基于 Docker ,可自己部署,也可以部署在云上,不依赖任何人。
ipwx
2022-01-29 18:44:16 +08:00
Python only 的操作系统从理论上是可行的。

但是当你逐渐完善以后会发现,你把现有的那一套都重新做了一遍。。。
cs8425
2022-01-29 18:48:53 +08:00
19 樓提到的 MicroPython 可行
但很多東西都要自己重寫 /port 一次

38 樓提到的
cs8425
2022-01-29 18:49:18 +08:00
@cs8425
Unikernel
cs8425
2022-01-29 18:55:43 +08:00
@cs8425 #63 #64
...手机板也太难回覆
选个字 莫名其妙又送出了= =
希望可以改善一下

19 楼提到的 MicroPython 可行
但很多东西都要自己重写 /port 一次

38 楼提到的 Unikernel 不只 MirageOS
github 上有一些清单可以参考:
https://github.com/cetic/unikernels#comparing-solutions
https://github.com/infoslack/awesome-unikernels
flynaj
2022-01-29 19:34:33 +08:00
操作系统是必须的,物理系统,或者容器都是可以选择 openwrt,操作系统才几兆。
darksheep9527
2022-01-29 19:56:53 +08:00
阿里云 /(任意一个云)的云函数或许能满足你的需要
pengtdyd
2022-01-29 20:01:10 +08:00
serverless 啊,直接面向未来
cwcc
2022-01-29 20:08:37 +08:00
pugaizai
2022-01-29 21:27:58 +08:00
学了一下午 docker ,时间算是浪费了。。。
才发现 docker 对我这个纯 python 项目完全是鸡肋,docker 应该更适合复杂的环境,或者更大规模集群应用。

环境:linux 架构的全部都可以安装 python3 并且胶水语言不存在兼容性问题。
容器:还有两个服务器都一直空着,隔离环境新开一个服务器就行了。
维护:自己搞了一个网页版的工具。文件管理,window 开发完,删除更新一键就搞定了,还能实时测试。
移植:所以 python 文件一键打包上传到新服务器就行了。

这 docker ,维护运行,虚拟机就够麻烦了,还在虚拟机里面再搞个容器。更新镜像,安装新 pip 包卸载 pip 包还要重新打包镜像部署。。。。

一顿操作下来,本意是看看有没有骑在自行车上吹风的方式。结果感觉不仅是买了个 40 吨卡车,还在卡车上面修了一个阳台,站在阳台上面吹风。。。
adoal
2022-01-29 22:47:08 +08:00
no silver bullet 啊。

作为一个从互联网时代之前走过来的甲方老运维,见过太多只想用主流的工程型编程语言写业务功能、当一个“纯程序员”而避开运维、安全、数据库等关联知识的人了。然而,除非是有一个完整的大团队,纯程避开了的这些事有专业角色来承担,否则,在大多数小团队里程序员多少也都要承担一些的,没有真正的纯程。

还是抽空静下心来循序渐进了解一些运维知识吧。至少,知道生产环境下的要求除了要用编程语言正确实现业务功能之外,还有很多其他靠考虑的东西。稍微学一些,反过来也对你的开发有帮助。运维看起来知识点多且杂乱,难以速成,但没有什么太大的难点,慢慢攒经验也好的。

当然,云服务商的 PaaS 、application engine 以致 serverless 之类的确是解决你痛点的好办法。但是你自己也清楚,这些好东西也各有其应用场景和限制,不一定总是适用。
felixcode
2022-01-29 22:56:20 +08:00
debian 不是 apt 一把梭再加 pip3 补充一下吗?不想用 docker 的话,最小化安装镜像再加几行命令放脚本里运行就行了啊,自动化一点就 ansible 或 vagrant 。
你是不是非得用 debian stable 版又觉得版本旧啊?
adoal
2022-01-29 23:09:17 +08:00
@felixcode 我怀疑甚至可能是用了某些云服务商(尤其是国内),只有 old stable 甚至 old old stable ,毕竟当前的 stable 是 bullseye ,python3 是 3.9 也不算旧了
hronro
2022-01-29 23:14:01 +08:00
有专门为这种只运行一个应用的服务器优化的操作系统,可以看看 https://github.com/nanovms/nanos
felixcode
2022-01-29 23:21:34 +08:00
@adoal
那应该是用的更旧的了。我用的 bookworm, 也记得 bullseye 没那么旧。
msg7086
2022-01-30 00:14:43 +08:00
有些概念从头开始就没讲明白。
比如说,什么是操作系统。

拿 Linux 系统来举例,简简单单可以分解成这些东西:
1. Linux 内核,或者说 Linux 。
2. 核心类库,比如 libc6 之类。
3. 用户空间工具,比如 bash init top 之类。
4. 用户空间类库,比如 libreadline ,libncurse 之类。

那么首先 Linux 内核肯定是要的,否则硬盘网络都没法用了。
然后是 libc6 之类的也是要的,否则就没法和内核通信了,自然硬盘网络都没法用了。
用户工具这些不直接影响使用的东西,的确可以不装。
用户空间类库还是要的,很多都是 python 直接依赖的库,没这些库的话 python 就跑不起来了。

所以这么多东西里,你只能拿掉这些用不到的小工具。
这种时候就是 docker 的专长了,可以很方便地定制裁剪操作系统的用户空间软件。
darkengine
2022-01-30 00:31:38 +08:00
@dzdh 买云厂商提供的 RDB 实例咯
eason1874
2022-01-30 00:50:12 +08:00
Python 是胶水语言,很多库会涉及系统软件调用

你找一个简易系统去跑 Python 可以,但是会受到很多限制。哪天你要用到的库需要调用主流系统都内置的软件,而你的简易系统没有,你就要去安装,安装不了你就用不上

觉得版本管理麻烦就上 docker 吧。生产环境关键是可靠,兼容性好,不值得为一点计算资源去牺牲这两点
FrankHB
2022-01-30 02:07:03 +08:00
@adoal PyPy 可以自举。
真正的问题是一些关键功能(比如 built-in module os )就是为了去利明确用不属于 Python 实现维护的外部操作系统去设计的,spec 都没怎么抽象而是直接暴露底层系统的语义,所以没外部操作系统支持的实现默认就是残的,跟“只能运行”直接矛盾。
FrankHB
2022-01-30 02:36:46 +08:00
这取决于用户如何理解“正常工作”。你的意思是提供部分实现原型,但用户需要的环境可能现实根本无法靠补充这个原型来实现。(虽然这里看来真不是什么问题。)
对一个有 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 实现”,现在应该没有;以后也不大可能会有。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/831269

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX