Как скомпилировать python из исходного кода и получить чистую / минимальную установку? - PullRequest
5 голосов
/ 28 февраля 2011

Если вы будете следовать простому процессу configure -> make -> make install для компиляции python из исходного кода, вы получите очень большую установку, включающую множество файлов, которые не нужны дляфункциональная среда Python.Например: все файлы .py остаются в установке (не только файлы .pyc или .pyo), все модульные тесты переносятся для каждой библиотеки в папках lib, страницы man включены и т. д.

Есть ли постоянный способ (сделать опцию?) Игнорировать или удалять «ненужные» файлы во время процесса установки, чтобы у вас был минималистский, но полностью функциональный дистрибутив python?

Еслинет готовой процедуры, какие файлы можно удалить, при этом убедившись, что установка все равно будет работать на том компьютере, на котором она была установлена?

Ответы [ 4 ]

9 голосов
/ 17 апреля 2012

Может быть поучительно взглянуть на пакет python2.7-minimal Debian (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 для достижения ваших целей.

5 голосов
/ 28 февраля 2011

Такой опции нет - и это хорошо, если оставить установку как есть (возможно, вы можете нарезать тестовые файлы вручную). Файлы .py удобны для отладки. Кроме того: вы действительно хотите сохранить полную установку как есть. Работа с урезанными установками Python, как мы видим это в различных дистрибутивах Linux, часто является проблемой *.

1 голос
/ 19 апреля 2012

Такие параметры (если они существуют в самом программном обеспечении) обычно находятся в сценарии configure. Чек configure -h.

В качестве альтернативы, вы можете попробовать удалить файлы .py, если существует файл с идентичным именем .pyc. Вы также можете удалить файлы .pyo. Удаление файлов .py и .pyo позволило бы сэкономить 72396 КБ при /usr/local/lib/python2.7 (это около 47%) при установке Python 2.7.3.

0 голосов
/ 19 июля 2014

Примечание. Python имеет встроенные модули, исполняемый файл Python, автономный, будет работать нормально. Вы можете удалить любые ненужные модули, это зависит от вас (или кого-то еще), чтобы определить, какие из них не понадобятся. Но помните о зависимости каждого модуля.

Некоторые модули встроены и поэтому всегда есть. Чтобы получить список встроенных модулей, выведите содержимое sys.builtin_module_names .

Например, с автономным исполняемым файлом 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 общедоступных модулей. Все встроено в исполняемый файл Python, автономно.

Как уже упоминалось, вы можете удалить любые файлы *.pyc и *.pyo, так как для работы модуля все требуется, это файлы *.py.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...