2011-02-28 87 views
4

如果你按照简单的configure->make - >make install的过程从源代码编译python,你最终会得到一个非常大的安装,其中包括一大堆功能python环境不需要的文件。例如:所有.py文件保留在安装(不只是.pyc.pyo文件),所有的单元测试主要是针对在lib文件夹中的每个库结转,手册页都包括在内,等如何从源代码编译python并获得一个干净/最小的安装?

是否有罐头(安装选项?)在安装过程中忽略或删除“不必要”的文件,这样你只剩下一个简约但功能完整的python发行版?

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

+0

我不这么认为。我唯一知道的是'make altinstall',它省略了基本名称'python'的符号链接。 – Keith 2011-02-28 06:18:28

+0

我一直在通过Makefile生成所有的选项(比如'altinstall','libinstall'等),并且找不到合适的组合......如果它存在的话! 'clean'和'distclean'有一些正确的逻辑(例如'.py'文件),但看起来并不适用于安装目录。奇怪的是,我找不到任何关于“altinstall”等文件的文档(其中有数十亿)。 – Russ 2011-02-28 06:24:48

回答

4

没有这样的选择 - 这是保持安装的好东西(也许你可以手动切割测试文件)。 .py文件对调试非常方便。除此之外:你真的想保持完整的安装。如我们在各种Linux发行版中看到的那样,处理精简的Python安装在*中经常很痛苦。

+1

尽管我普遍认同,但还是有几种情况,驱动器空间最小,额外的40 MB左右(我完全忘记了手动清除后多少)真的需要消除。例如:嵌入式系统或类似[TinyCore Linux](http://tinycorelinux.com/)(其中整个操作系统<10 MB)。像'libinstall'这样的选项已经被埋在make文件中,有一个组合可以去掉不必要的项目,看起来应该存在。 – Russ 2011-02-28 06:32:02

7

看看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为达到目标所做的相同的方法。

+0

谢谢 - 我不知道debian中的'-minimal'软件包。我必须深入研究这一点,因为此刻,我不知道如何解析它!我研究过[tinypy](http://www.tinypy.org)和[portable python](http://www.portablepython.com/),但他们的目标不同。 – Russ 2012-04-16 21:40:35

+0

谢谢,zigg--给你指向'minimal'软件包的赏金。我从来没有解密过'debian/rules',但是在了解这些包的基础上,我可以从清单文件列表中获得一些提示[在本页面](http://packages.debian.org /sid/python2.7-minimal)。对于登陆这里的其他人,要小心''minimal'包的意图是用于严格限制启动过程脚本,所以有*许多*缺少和基本模块(如'os'!)。 – Russ 2012-04-23 17:01:35

1

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

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

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
  • ​​
  • _warnings
  • _weakref
  • atexit
  • builtins
  • errno
  • faulthandler
  • gc
  • itertools
  • marshal
  • posix
  • pwd
  • signal
  • sys
  • xxsubtype
  • zipimport

有私人模块,同时还13个公共模块。所有内置的Python可执行文件都是独立的。

如前所述,您可以删除任何*.pyc*.pyo文件,对于要工作的模块,全部是必需的,是*.py文件。

+0

这个答案不正确。 '编码','_bootlocale'和可能的'站点'模块需要启动。 – ppperry 2016-06-29 16:23:33