V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
pugaizai
V2EX  ›  Python

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

  •  
  •   pugaizai · 2022-01-29 14:12:15 +08:00 · 9777 次点击
    这是一个创建于 1033 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    想问一下有没有办法搭建一个纯 python 服务器,就像云函数一样。或者是最精简的 python 服务器是什么?
    
    云函数其实挺好,就是有一些限制不像服务器上面方便。所以问问各位大神有没有更好的搭建方法。
    
    98 条回复    2022-05-04 17:14:30 +08:00
    adoal
        1
    adoal  
       2022-01-29 14:21:57 +08:00
    可以用更轻量级的发行版比如 Alpine……

    咱就不提操作系统作为一个管理硬件的抽象层很难去掉。就说在操作系统里运行的程序,也许你写业务代码只直接用到 Python ,但用的功能模块还要依赖各种 C 库,所以 pip 之外的 C 库包管理也是必要的。
    winzkh
        2
    winzkh  
       2022-01-29 14:24:49 +08:00   ❤️ 1
    linux+busybox+python
    ClericPy
        3
    ClericPy  
       2022-01-29 14:31:12 +08:00   ❤️ 1
    只需要运行 python 是个什么情况, 场景是啥

    docker 可以么, alpine 简陋的我都不想用...
    Serverless 哪不太好呢, 无状态出错概率小啊, 如果不喜欢, 以前用过 heroku 也是有点类似免运维的体验
    nuitka 把你 python 程序打包成 .so ?

    还是没太看懂需求
    ERRASYNCTYPE
        4
    ERRASYNCTYPE  
       2022-01-29 14:32:51 +08:00
    jupyter 那种?
    illl
        5
    illl  
       2022-01-29 14:36:05 +08:00 via iPhone   ❤️ 1
    云函数?
    huangsen365
        6
    huangsen365  
       2022-01-29 14:38:59 +08:00 via iPhone   ❤️ 2
    docker alpine python
    markgor
        7
    markgor  
       2022-01-29 14:40:15 +08:00   ❤️ 7
    跟帖同求如何不装 windows 运行 edge ,我只需要运行 edge 即可,window 系统我不用
    pugaizai
        8
    pugaizai  
    OP
       2022-01-29 14:42:49 +08:00
    感谢各位大神,意思必须是操作系统+python 才能运行 python 吗?
    有没有直接就是 “python==操作系统” 这样的软件存在,可以执行 python 程序的最简单架构
    pugaizai
        9
    pugaizai  
    OP
       2022-01-29 14:43:55 +08:00
    @markgor 你这个需求我装了个 chromeos ,还是要 7 个多 G
    markgor
        10
    markgor  
       2022-01-29 14:47:50 +08:00
    @pugaizai #9
    不开玩笑了,
    Python 无法取代系统,底层的调用还是依赖系统的库。
    而你用云函数那种,属于一堆主机(装了操作系统的)运行代码时通过 docker 创建个环境执行,所以一般都有冷启动问题,再深入的我就不知道了。
    momocraft
        11
    momocraft  
       2022-01-29 14:48:21 +08:00
    什么叫只运行 python 你以为 python 是怎么读写文件网络的
    lvsemi1
        12
    lvsemi1  
       2022-01-29 14:49:48 +08:00
    可以的,直接 bios 里跑
    pugaizai
        13
    pugaizai  
    OP
       2022-01-29 14:51:42 +08:00
    哈哈哈 感谢,这个不错#docker alpine python

    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
        14
    adoal  
       2022-01-29 14:58:03 +08:00   ❤️ 8
    Python 这种连自举都不能的语言哪配得上“==操作系统”……
    要么你用 MicroPython 的单片机,不过那玩意不论是性能还是生态应该都不是你想要的东西。
    你可能不是科班出身,对计算机系统的理解有问题。操作系统这玩意,从业务角度是看不到也不需要的,但如果没有它,你自己要做的事就太多了。正是因为信息系统的分层架构模式,才能让写业务的人专心写业务不用关注底层技术实现。如果没有操作系统,又想运行 Python ,那 Python 解释器的实现者可能要自己去处理各种硬件的底层操作,而且还要适配各种硬件。你轻轻祭起你认为“只要……就好”的 Python 写出业务代码“岁月静好”,但代价是底层的 C 库、操作系统在“负重前行”处理了让人望而生畏的肮脏细节。

    其实这是一个 X-Y 问题,你提出的“只需要运行 Python”并不是真正的需求,不如讲一下为什么不想要操作系统……如果是嫌运行在正常的 Linux 发行版里体积大的话,那就可以用轻量级的发行版,实在不行还可以自己做裁剪(尽管以你的知识水平和经验目前这个做法不现实)。但是操作系统的基础组件是逃不掉的,很多 Python 包依赖的下层 C 库也是逃不掉的。
    adoal
        15
    adoal  
       2022-01-29 15:01:57 +08:00
    @pugaizai 然后装了一堆 Python 包,体积也会大起来,尤其是其中还有非纯 Python 实现的包,依赖额外的 C 库……这些 C 库的 build & install 折腾死人,然后你发现还不如用一个正常的发行版
    also24
        16
    also24  
       2022-01-29 15:03:24 +08:00   ❤️ 3
    虽然楼主的需求可能只是一个尽可能小的系统镜像,但是楼上的多数人似乎认为 python 一定要依附于操作系统存在?

    事实上 python 确实可以脱离操作系统来使用(也可以理解为自己接管了一部分操作系统的工作)


    比如说,这个 7 年前的视频 :

    Josh Triplett - Porting Python to run without an OS - PyCon 2015

    markgor
        17
    markgor  
       2022-01-29 15:03:30 +08:00
    @pugaizai #13 emmm...那你的 docker 在哪里运行.....
    sujin190
        18
    sujin190  
       2022-01-29 15:05:40 +08:00   ❤️ 1
    @pugaizai #8 你这话的通俗版就是

    我不想要地基,太浪费地方了,有没有不需要地基就直接盖大楼的方式

    未来能不能不知道,但是现在肯定是不能的
    zsj950618
        19
    zsj950618  
       2022-01-29 15:08:53 +08:00 via Android
    micropython
    Privileges
        20
    Privileges  
       2022-01-29 15:09:09 +08:00
    我还以为我理解有问题。。
    docker 拉个 Python-Alpine 最小镜像不就能解决了吗,没有操作系统怎么运行 Python 怎么装依赖环境?
    44670
        21
    44670  
       2022-01-29 15:12:48 +08:00
    buildroot ,只选择 python3
    adoal
        22
    adoal  
       2022-01-29 15:13:38 +08:00
    @also24 可以理解为把 Grub 作为一个丐版的操作系统……
    also24
        23
    also24  
       2022-01-29 15:14:56 +08:00   ❤️ 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
        24
    whileFalse  
       2022-01-29 15:15:24 +08:00
    @Privileges 没有操作系统哪儿来的 docker
    also24
        25
    also24  
       2022-01-29 15:17:33 +08:00
    @adoal #22
    只是这个演示借助了 Grub 而已,不代表这个操作一定要借助 Grub ,毕竟这只是个演示。

    我主要是想表达,楼里有不少人认为传统意义上的操作系统不可缺少,这个想法是不正确的。
    codehz
        26
    codehz  
       2022-01-29 15:18:54 +08:00
    为了安全性的话,可以考虑用 firecracker ,通过轻量级虚拟机运行订制内核(
    不过 rootfs 还是得靠自己提供
    huangsen365
        27
    huangsen365  
       2022-01-29 15:23:37 +08:00 via iPhone
    coreos 自带 docker ,如果非要钻牛角尖的,可以用 google 的 app engine ,或者 azure 的 app service
    Privileges
        28
    Privileges  
       2022-01-29 15:27:32 +08:00
    @whileFalse 草 想只运行 Python 又不要操作系统
    pugaizai
        29
    pugaizai  
    OP
       2022-01-29 15:30:30 +08:00
    果然有大神,本人确实不是科班出身。
    最大的问题是因为,每次配置新服务器,都要通过各种百度、google 一顿操作。到最后,仅仅只是为了安装一个 20 多 Mb 的 pyhton3 而已。

    就面临几个问题。
    比如 debian 默认版本 python2 ,自带 python3 版本也很低。就需要很多操作才能换成高版本 python3 ,而且 python2 各种程序还在后台持续运行不能删除(不一定对)。
    另外安装这些 debian 操作系统,防火墙及其他各种漏洞,知识有效不甚了解。操作系统很多无用的程序占用资源不说,出现漏洞被挂了马也难以判断和监测。
    arischow
        30
    arischow  
       2022-01-29 15:42:56 +08:00 via iPhone
    看情况,一般 slim 起步
    liuxu
        31
    liuxu  
       2022-01-29 15:49:58 +08:00 via Android
    emm....楼主可能需要的是类似 digitalocean 的应用服务器,可以直接拉 github 的 python 项目直接跑,google 和新浪也有,不知道下线没
    adoal
        32
    adoal  
       2022-01-29 15:53:48 +08:00
    @pugaizai 所以我说这是一个 X-Y 问题,你需要做的是学习操作系统运维知识,而不是找一个没有操作系统就能运行的 Python……事实上不论是 MicroPython 还是其它几个 toy 级的无操作系统 Python 实现都不是你需要的东西。

    另外,Debian 11 里带的 Python 3 是 3.9 版,不算低了吧。
    adoal
        33
    adoal  
       2022-01-29 15:54:28 +08:00   ❤️ 1
    所以问问题最好是直接讲清楚原始需求,而不是自己先猜测一个解决办法,再问这个解决办法如何实现。
    youngce
        34
    youngce  
       2022-01-29 15:56:52 +08:00
    @pugaizai #29 根据你的描述 docker 就好了
    XiLingHost
        35
    XiLingHost  
       2022-01-29 16:21:35 +08:00
    如果是不想配置服务器,可以考虑试试 VMware 家的 Photon OS ,然后 tdnf install docker ,用 docker 来管理环境
    luckyrayyy
        36
    luckyrayyy  
       2022-01-29 16:27:48 +08:00 via iPhone
    感觉还是云函数比较适合你…底层都不用管了
    duzhor
        37
    duzhor  
       2022-01-29 16:31:08 +08:00
    LXC 或者 docker 可以做到尽量小,python 底层依赖操作系统内核
    wonderblank
        38
    wonderblank  
       2022-01-29 16:34:37 +08:00   ❤️ 2
    楼主的想法之前我也有过,上面的回复基本上全部在点子上。

    首先,我们允许的程序基本上都依赖于操作系统,操作系统和硬件给我们管理内存,磁盘,中断等。脱离了操作系统,应用程序很难跑起来,因为没有环境。

    那么,有没有一种操作系统,这个操作系统就是我们写的程序,不依赖于任何其他的依赖?

    有的,关键词是 "Unikernel"

    楼主可以看看 MirageOS https://mirage.io/
    dzdh
        39
    dzdh  
       2022-01-29 16:38:15 +08:00
    @pugaizai 同感。比如 mysql 。有没有 mysql==OS 的东西 不要有任何一丢丢非 mysql 必须要的其他软件依赖环境

    time 留着 什么 sh bash build 包 一个都不要有
    krcalc
        40
    krcalc  
       2022-01-29 16:38:31 +08:00
    docker + distroless 镜像 + python 应该不能更精简了
    learningman
        41
    learningman  
       2022-01-29 16:40:35 +08:00 via Android
    alpine 装某些带 C 库的包会出错,因为它是 musl ,和 glibc 不完全兼容。比如 numpy 。
    还是推荐用 python-slim
    newmlp
        42
    newmlp  
       2022-01-29 16:43:11 +08:00
    Alpine 可以试试看
    Buges
        43
    Buges  
       2022-01-29 16:46:02 +08:00 via Android
    Python 应该不能跑 bare metal ,那么最简环境应该是 init=/usr/bin/python3
    zxCoder
        44
    zxCoder  
       2022-01-29 16:46:22 +08:00
    @pugaizai 这个也是要操作系统的啊。。。
    jstony
        45
    jstony  
       2022-01-29 16:46:55 +08:00
    esp32+micropython ,够精简了。
    ETiV
        46
    ETiV  
       2022-01-29 16:57:46 +08:00 via iPhone
    LZ 这个想法我之前也想过,Java Bytecode 运行在 JVM 上。
    既然是 VM ,那有没有可能让 Bytecode 运行在某个实体机上面😂
    ddzzhen
        47
    ddzzhen  
       2022-01-29 17:05:46 +08:00 via Android
    openwrt ,core-python ?
    gengchun
        48
    gengchun  
       2022-01-29 17:31:38 +08:00   ❤️ 1
    我自己就是在生产上用的 docker alpine / k8s 跑 python 服务,折腾的那些时间换成工钱,用来在阿里云上买的那点系统空间的云盘,估计用个十年都是可以的。

    所以我说,我折腾这个,就是自己造的伪需求,除了证明自己聪明外,提升一下自己的安全感以外,没有任何意义。

    真要折腾这个,除了学术层面,唯一的可能就是嵌入式项目,或者航天航空有特殊需求。OP 大概率是自己看着几个 G 的虚拟机镜像觉得不顺眼而已。
    wellsc
        49
    wellsc  
       2022-01-29 17:37:59 +08:00
    @adoal 说 python 不能自举我可不服,pypy 了解下
    neoblackcap
        50
    neoblackcap  
       2022-01-29 17:42:35 +08:00
    @markgor edge 可以在 linux 上面跑的,你这个问题不成立的
    adoal
        51
    adoal  
       2022-01-29 17:43:29 +08:00 via iPhone
    @wellsc 白马非马,rpy 也算 py 吗?
    neoblackcap
        52
    neoblackcap  
       2022-01-29 17:45:10 +08:00
    如果是为了管理以及部署方便,可以使用托管型的 k8s ,据我所知,各大云服务提供商都有提供。好不好用就不清楚,不过基本能满足你拉代码就能跑的程度。当然了,你还是要写一个 Dockerfile 用于构建能运行的镜像
    dick20cm
        53
    dick20cm  
       2022-01-29 17:48:37 +08:00
    Python 算法工程师现状:Py 秒天秒地秒空气,有了 Py 感觉连操作系统都多余了。过几年大概会有人问,如何不通电使用 Python
    Rheinmetal
        54
    Rheinmetal  
       2022-01-29 17:50:01 +08:00
    @gengchun op 嫌弃装 python 麻烦而已
    用 docker 的话就有两个问题了
    google 如何装 docker
    如何用 docker
    :doge:
    anxn
        55
    anxn  
       2022-01-29 17:57:17 +08:00
    python 有嵌入式版的 非常小
    pugaizai
        56
    pugaizai  
    OP
       2022-01-29 18:09:12 +08:00
    感谢各位,狂搜了两小时这些新名词,大概了解了,学到了很多。

    像 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
        57
    shayuvpn0001  
       2022-01-29 18:18:35 +08:00
    @gengchun 航空航天用 Python ? 怕是要到银河系以外去 catch 各种异常了。。。
    ziseyinzi
        58
    ziseyinzi  
       2022-01-29 18:24:55 +08:00
    如果只是不想维护系统,很多云服务商都有 PaaS 服务,提供 python 环境。
    zhaiblog
        59
    zhaiblog  
       2022-01-29 18:30:14 +08:00 via iPhone
    @pugaizai 拨号.apk 只有 500k 的原因正是因为操作系统帮你封装了很多复杂操作,你想只要能拨号也不是做不到,需要抽离出很多东西,到最后体积也不会很小,并且花费的时间可能匹配不上你的收益。还不如直接装个系统再装个拨号.apk 。
    marquina
        60
    marquina  
       2022-01-29 18:32:28 +08:00   ❤️ 1
    @pugaizai #56 感觉就是我需要打电话而已,但是要安装一个“Android 系统”,而我的 “拨号.apk”只有 500kb

    好奇问下,你的希望是手机不需要安装 Andorid 就能运行你的“拨号.apk”吗……
    Chad0000
        61
    Chad0000  
       2022-01-29 18:38:55 +08:00
    强烈建议用 Docker ,我现在做项目都基于 Docker ,可自己部署,也可以部署在云上,不依赖任何人。
    ipwx
        62
    ipwx  
       2022-01-29 18:44:16 +08:00
    Python only 的操作系统从理论上是可行的。

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

    38 樓提到的
    cs8425
        64
    cs8425  
       2022-01-29 18:49:18 +08:00 via Android
    @cs8425
    Unikernel
    cs8425
        65
    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
        66
    flynaj  
       2022-01-29 19:34:33 +08:00 via Android
    操作系统是必须的,物理系统,或者容器都是可以选择 openwrt,操作系统才几兆。
    darksheep9527
        67
    darksheep9527  
       2022-01-29 19:56:53 +08:00
    阿里云 /(任意一个云)的云函数或许能满足你的需要
    pengtdyd
        68
    pengtdyd  
       2022-01-29 20:01:10 +08:00
    serverless 啊,直接面向未来
    cwcc
        69
    cwcc  
       2022-01-29 20:08:37 +08:00
    pugaizai
        70
    pugaizai  
    OP
       2022-01-29 21:27:58 +08:00
    学了一下午 docker ,时间算是浪费了。。。
    才发现 docker 对我这个纯 python 项目完全是鸡肋,docker 应该更适合复杂的环境,或者更大规模集群应用。

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

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

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

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

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

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

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

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

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

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

    觉得版本管理麻烦就上 docker 吧。生产环境关键是可靠,兼容性好,不值得为一点计算资源去牺牲这两点
    FrankHB
        79
    FrankHB  
       2022-01-30 02:07:03 +08:00
    @adoal PyPy 可以自举。
    真正的问题是一些关键功能(比如 built-in module os )就是为了去利明确用不属于 Python 实现维护的外部操作系统去设计的,spec 都没怎么抽象而是直接暴露底层系统的语义,所以没外部操作系统支持的实现默认就是残的,跟“只能运行”直接矛盾。
    FrankHB
        80
    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 实现”,现在应该没有;以后也不大可能会有。
    seanzxx
        81
    seanzxx  
       2022-01-30 03:28:44 +08:00
    感觉 op 需要的并不是真正 python 实现的操作系统,而只是一个不用配置就可以直接运行 python 的服务器环境,云服务商都有很多选择呀,比如 aws 就提供很多层次的支持
    lambda:最简单的 serverless 实现,有 15 分钟运行限制
    beantalk:直接部署代码,基础设施 aws 帮你完成,常用于 web app
    ecs:自动管理的 docker 环境,自动创建主机,部署你的 image ,自动设置各种外部服务,比如 LB

    觉得 docker 麻烦是你不熟悉,
    docker 最大的优点是保证你的代码在不同的地方部署都能得到一样的结果
    一般会有一个 CI 服务器,比如常用的 jenkins 或者 aws code pipeline
    你的代码提交到 git ,CI 就自动打包,自动部署,自动测试
    你其实就只关心你的代码,本地测试好,提交代码
    剩下的事情 CI 和 Docker 就可以帮你搞定了
    Chad0000
        82
    Chad0000  
       2022-01-30 03:44:24 +08:00 via iPhone
    @pugaizai #70 直接部署在服务器上可能一开始简单,但后面如果迁移到其他服务器就麻烦了。比如服务器突然有问题要快速恢复服务怎么办,依赖要升级怎么办,网站升级不停服务怎么办?如果这涉及到第三方软件那就更耗时了。

    你有 docker 的话超级简单,甚至建议了解一下 K8S ,我现在直接本地开发然后部署到 K8S 里面。我的 elastic search ,日志中间件都部署在上面,迁移到话就是一个配置文件而已。
    gengchun
        83
    gengchun  
       2022-01-30 06:56:46 +08:00
    @shayuvpn0001 事实上确实有用。比如说 NASA 的 fprime 。学计算机的最重要的用途就是不用把别人写的程序再用其它语言实现一遍,形式化验证并不在乎是什么语言写的。
    gbw1992
        84
    gbw1992  
       2022-01-30 09:24:23 +08:00   ❤️ 2
    我怎么感觉有点舍本逐末的意思了?
    我大概理解题主的意思了,我只是运行几个 python 的简单函数,但是却要安装庞大的系统。

    我突然想起来我们之前的项目,只是跑两三个容器的项目,居然研究起来 k8s ?
    我只想过个河而已,你把航空母舰的图纸拿给我干啥?

    但是题主你想过没有,你在 python 一句话访问一个 http 请求,其实背后有多少的依赖?
    其实都是操作系统帮你做了,你有种子想种菜,但是你不能离开土地呀。

    还有 docker 这些都是帮助你工程化的工具。就像是你想不用土地种菜,但是你得掌握无土化栽培技术。

    我感觉更适合题主的是云服务商的函数引擎服务,代码贴在编辑器里直接点运行就跑起来。
    zjddp
        85
    zjddp  
       2022-01-30 10:05:02 +08:00
    还是 jupyter 咯?

    或者 op 能模仿“吹风”把你的实际需求简单明了地说一下吗?
    yangyaofei
        86
    yangyaofei  
       2022-01-30 10:56:51 +08:00
    只运行 Python 是不可能的, 如果不固定场景, 很多时候是要用 C 库的或者别人编译的包里面有 C 库依赖的, 最终可能 alpine 不行的, 即使是 Ubuntu 这种, 还是会装一堆东西
    ety001
        87
    ety001  
       2022-01-30 11:16:58 +08:00
    op 需要的就是云函数,云函数有限制的,想办法绕过去,绕不过去就不要自己写了,淘宝 /猪八戒花钱找人来写就可以。如果觉得花钱贵,那是有道理的,因为你花钱请来的人懂得的知识,就是你现在不会且不想花时间学习的,你这个钱花的值,毕竟对你来说是花钱买了时间和心情。
    arischow
        88
    arischow  
       2022-01-30 11:22:20 +08:00   ❤️ 1
    你需要另外请三个 team 给你服务:arch / infra / sre ,这样你就可以专注你的「 Python 代码」
    rekulas
        89
    rekulas  
       2022-01-30 13:22:56 +08:00
    @also24 我感觉正常人的理解才是对的,python 无法脱离操作系统独立运行
    正如你自己也写的,micropython 和 pipyos ,但他们不是 python ,包括你视频发的,也不是 python
    如果你问一个程序员,python 能否脱离 os 独立运行,他的答案是否
    然后你再问他,对 python 进行修改或者精简,能否脱离 os 运行,他的回答有可能是能
    但这并不意味着 python 就可以脱离 os ,除非-你能运行一个完全脱离 os 并具备大部分特性的 python ,并且它跟通用 python 的差异就像嵌入式 C 跟 C 的差距一样小,大家才会这样认为
    Donahue
        90
    Donahue  
       2022-01-30 15:57:09 +08:00
    楼主需要的是 docker
    cskeleton
        91
    cskeleton  
       2022-01-30 18:58:33 +08:00
    @zhaiblog #59 让我想起来小时候用 1.44 寸软盘把.exe 拷去学校的电脑上, 就能上课玩游戏了.
    q197
        92
    q197  
       2022-02-01 11:40:21 +08:00
    我觉得这个问题还是有价值的,楼主的问题其实是:希望找到一个尽可能小的系统,能满足 Python (及其配套)就行了,不要别的东西,系统越精简越好。这样的 Linux 其实也不一定好找。楼中提到的 alpine 应该是一个。
    py2ex
        93
    py2ex  
       2022-02-01 23:26:14 +08:00
    你可以写信去问 Guido Van Rossum(best known as the creator of the Python programming language)
    有没有这样的东西,
    我(能力范围内)可以告诉你的是,python 只是编程语言,现在无法代替操作系统,未来应该也没有这样的计划。
    专业的人做专业的事。

    #14 @adoal 说得很清楚,python 无法“自举”,也就是没有做到从逻辑电路启动到 python 可工作的状态。

    前面几楼提到的 alpine 镜像构建应用的思路更加接近你的需求和具有可行性。

    实际上我以前也沉迷过构建最小镜像。经验是,按照现在的网速 LAN 1Gbps 的环境,100MB 以内已经足够小了。
    tairan2006
        94
    tairan2006  
       2022-02-02 10:45:14 +08:00
    你们在讨论啥……用 Python 不用第三方库么?

    很多第三方库依赖底层的二进制文件,你在这费心搞个 pure python 的环境,到头来啥也干不了,何苦呢?
    tairan2006
        95
    tairan2006  
       2022-02-02 10:46:40 +08:00
    解决楼主的问题是构建一个镜像(os/docker),每次一键安装就好了…
    lizytalk
        96
    lizytalk  
       2022-02-02 13:37:46 +08:00 via iPhone
    发行版用 alpine 这种
    adoal
        97
    adoal  
       2022-02-02 14:15:08 +08:00 via iPhone
    我觉得还在帮楼主出主意怎么精简系统的盆友们可以洗洗睡了。虽然楼主一开始的文字的确是这么表达的,但在后来的对话中挖掘出来他的本意,关键还是不想去涉及部署、运维、安全等方面知识的学习,只想做一个关注业务功能实现的纯业务程序员。那么,追求系统精简只是认知偏差后得到的表象需求,真正需要的是学习成本卸载。但尝试 docker 的体验又不太好。那只有 88 楼说的了,在大厂里有专门负责基础设施的团队,写业务的可以专心蟹业务。
    rev1si0n
        98
    rev1si0n  
       2022-05-04 17:14:30 +08:00
    其实吧,可以是可以,我在个人项目做了类似的想法,我是把 Python 直接依照项目的需求完整移植到了安卓(全部使用源码+安卓 ndk 编译系统编译完成)我个人认为这已经是最小化了,因为安卓上除了安卓,底子就是一个精简的 linux 。但是实际上绝对不可能只有 Python ,因为它自己本身也依赖了好多个外部库,openssl ,sqlite ,zlib ,lzma ,curses ,gettext ,readline 等等,当然你可以根据实际使用丢掉或者使用它。但这仅仅是完整的 Python ,如果你要使用任何外部库,做的工作会更多,因为很多外部库也有外部依赖且需要编译,所以我也只是加了十几个需要编译的外部库,除此之外,Python 原生代码编写的库就可以直接拿来使用。我这种肯定是最麻烦的方法,但是确实可以极大的控制我需要以及不需要的东西。

    基本想法就是楼上的 linux + busybox + Python 。busybox 不一定需要,但是 linux + Python 绝对是必须的。
    而且,你也别指望可以用 pip 之类的东西了,做好后,你是可以使用 pip ,但是也仅限于安装 Python 原生代码编写的库。想安装其他的东西,举个例子,Pillow ,你只有两个选择,第一,像我上面那样做,第二,在这个系统上安装 gcc 以及 libjpeg/tiff/webp 等等等等但这可能已经不是你的本意了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1451 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 17:16 · PVG 01:16 · LAX 09:16 · JFK 12:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.