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

时间:2011-02-28 06:15:49

标签: python installation makefile

如果您遵循简单的configure - > make - >用于从源代码编译python的make install进程,最终会得到一个非常大的安装,其中包含许多功能python环境不需要的文件。例如:所有.py文件都保留在安装中(不仅仅是.pyc.pyo文件),所有单元测试都会在lib文件夹中的每个库中进行,手册页是包括在内等。

在安装过程中是否有一个罐装方式(make选项?)忽略或删除“不必要的”文件,这样你就可以得到一个极简主义但功能齐全的python发行版?

如果没有预先制作的程序,哪些文件可以被删除,同时确定安装仍然可以在它安装的机器上运行?

4 个答案:

答案 0 :(得分: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中没有真正的最小目标,但也许你可以采用相同的方法来实现你的目标。

答案 1 :(得分:5)

没有这样的选择 - 保持安装是一件好事(也许你可以手动切断测试文件)。 .py文件可以方便调试。除此之外:你真的想保持完整的安装。正如我们在各种Linux发行版上看到的那样处理剥离的Python安装通常是 * 中的一个难题。

答案 2 :(得分:1)

这些选项(如果它们存在于软件本身中)通常可以在configure脚本中找到。检查configure -h

或者,如果存在名称相同的.py文件,则可以尝试删除.pyc个文件。您还可以删除.pyo个文件。在我的Python 2.7.3安装中删除.py.pyo文件将在/usr/local/lib/python2.7下保存72396 kB(大约47%)。

答案 3 :(得分:0)

注意Python有内置模块,Python可执行文件是独立的,可以正常工作。您可以删除任何不需要的模块,这取决于您(或其他人),以确定哪些模块不会被要求。但请注意每个模块的依赖关系。

有些模块是内置的,所以总是存在。要获取内置模块列表,请转储sys.builtin_module_names

的内容

Ex,使用独立的Python 3.4.1可执行文件,在Ubuntu平台上编译:

>>> import sys
>>> for m in sys.builtin_module_names: print(m)

这告诉:

  • _ast
  • _codecs
  • _collections
  • _functools
  • _imp
  • _io
  • _locale
  • _operator
  • _sre
  • _stat
  • _string
  • _symtable
  • _thread
  • _tracemalloc
  • _warnings
  • _weakref
  • atexit
  • builtins
  • errno
  • faulthandler
  • gc
  • itertools
  • marshal
  • posix
  • pwd
  • signal
  • sys
  • xxsubtype
  • zipimport

有私人模块,还有13个公共模块。 All都是在Python可执行文件中构建的,独立。

如前所述,您可以删除所有*.pyc*.pyo文件,因为要使用的模块都是必需的,是*.py个文件。