如何从源代码编译Python并获得干净/最小的安装?

7 投票
4 回答
12460 浏览
提问于 2025-04-16 12:39

如果你按照简单的步骤 configure -> make -> make install 来从源代码编译 Python,你会发现安装的内容非常庞大,里面有很多其实并不需要的文件,但这些文件却占用了空间。比如说,所有的 .py 文件都会被保留在安装包里(不仅仅是 .pyc.pyo 文件),每个库的单元测试文件也会被带过来,还有手册页等等。

有没有什么现成的方法(比如说某个选项)可以在安装过程中忽略或去掉这些“多余”的文件,这样你就能得到一个简洁但功能齐全的 Python 版本呢?

如果没有现成的步骤,那哪些文件可以去掉,同时又能确保安装后在机器上还能正常运行呢?

4 个回答

1

这样的选项(如果软件本身有的话)通常可以在 configure 脚本中找到。你可以试着输入 configure -h 来查看帮助信息。

另外,如果有同名的 .pyc 文件,你也可以尝试删除 .py 文件。同时,.pyo 文件也可以删除。删除 .py.pyo 文件可以在我的 Python 2.7.3 安装中节省大约 72396 kB 的空间(大约是 47%)。

5

没有这样的选项——这其实是件好事,保持安装的原样是有好处的(也许你可以手动删掉测试文件)。这些 .py 文件在调试的时候很有用。除此之外,你真的希望保持完整的安装状态。我们在各种 Linux 发行版上看到的那些精简版的 Python 安装,通常会让人感到很麻烦。

9

看看Debian的 python2.7-minimal 包可能会很有帮助,你可以通过 apt-get source python2.7-minimal 来获取它。当你不确定的时候,最好看看别人,特别是专家们是怎么做的……

debian/rules 文件中可以看到:

: # Move the binary and the minimal libraries into $(p_min).
dh_installdirs -p$(p_min) \
        etc/$(PVER) \
        usr/bin \
        usr/include/$(PVER) \
        usr/share/man/man1 \
        $(scriptdir)/lib-dynload \
        $(scriptdir)/config
DH_COMPAT=2 dh_movefiles -p$(p_min) --sourcedir=$(d) \
        usr/bin/python$(VER) \
        usr/share/man/man1/python$(VER).1 \
        $(foreach i,$(MIN_MODS),$(scriptdir)/$(i).py) \
        $(foreach i,$(MIN_PACKAGES),$(scriptdir)/$(i)) \
        $(foreach i,$(MIN_ENCODINGS),$(scriptdir)/$(i)) \
        $(scriptdir)/config/Makefile \
        usr/include/$(PVER)/pyconfig.h \
        $(scriptdir)/site.py

这些 MIN_* 变量是从 README.Debian.in 文件中解析出来的,这个文件不仅是包的 README,还成为了决定包含哪些模块的权威来源。

这些内容很有趣,我之前从来没有关注过。至于你的问题,答案似乎是,Python中确实没有一个真正的最小目标,但也许你可以采用Debian的做法来实现你的目标。

撰写回答