Je compile python à partir de la source tar. Tout fonctionne bien, mais les tests durent 2 heures et 2 fois. Comment contourner ces tests?
0:16:20 [178/405] test_inspect
0:16:26 [179/405] test_int
0:16:27 [180/405] test_int_literal
0:16:27 [181/405] test_io
0:18:18 [182/405] test_ioctl -- test_io passed in 1 min 51 sec
0:18:19 [183/405] test_ipaddress
0:18:22 [184/405] test_isinstance
0:18:23 [185/405] test_iter
0:18:24 [186/405] test_iterlen
0:18:25 [187/405] test_itertools
0:19:09 [188/405] test_json -- test_itertools passed in 44 sec
0:19:30 [189/405] test_keyword
À la suite
make 7724,86s user 188,63s system 101% cpu 2:10:18,93 total
Je fais sa distribution comme ça
PYTHON_VERSION = 3.6.1
PYTHON_URL = https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz
wget -O dl/Python-${PYTHON_VERSION}.tar.xz ${PYTHON_URL}
cd dl
tar xf Python-${PYTHON_VERSION}.tar.xz
mkdir -p dl/Python-${PYTHON_VERSION}-build/
cd Python-${PYTHON_VERSION}
./configure --enable-optimizations --prefix=$$(pwd)-build --cache-file=$$(pwd)/cache-file
Cette commande exécute des tests deux fois:
make -C dl/Python-${PYTHON_VERSION} -j8
make -C dl/Python-${PYTHON_VERSION} -j8 install
p.s. Cela fait partie d'un autre fichier make.
L'option de configuration --enable-optimizations permet aux suites de tests en cours d'exécution de générer des données permettant de profiler Python. Le binaire python résultant offre de meilleures performances pour l'exécution de code python. Améliorations constatées ici
From configure help:
--enable-optimizations Enable expensive optimizations (PGO, etc). Disabled by default.
De wikipedia
profile-guided optimisation uses the results of profiling test runs of the instrumented program to optimize the final generated code.
En bref, vous ne devez pas ignorer les tests lorsque vous utilisez --enable-optimizations car les données requises pour le profilage sont générées par les tests en cours. Vous pouvez exécuter make -j8 build_all
suivi de make -j8 install
pour ignorer les tests une fois (les tests seraient toujours exécutés avec install
cible), mais cela irait à l’encontre de l’objet . Vous pouvez plutôt supprimer l’indicateur configure pour de meilleurs temps de génération.
J'ai fait quelques recherches (rapides) pour ignorer les tests lors de la construction de Python en indiquant:
--without-tests
, --disable-tests
, --skip-tests
)Le premier n'a donné aucun résultat. Ce dernier (en cherchant dans le modèle Makefile) a révélé le fait que l'exécution du test est appelée en appelant $ {PYTHON_SRC_DIR}/Tools/scripts/run_tests.py (qui définit appelle un autre script qui en appelle un autre, ...). Notez que j'ai trouvé le fichier sur Python3.5 (.4) et Python3.6 (.4) mais pas sur Python2.7 (.14 ). Un peu plus de recherches ont révélé qu'il est possible d'ignorer le test ci-dessus. Ce que vous devez faire c'est:
make -C dl/Python-${PYTHON_VERSION} -j8 EXTRATESTOPTS=--list-tests install
Remarques:
EXTRATESTOPTS
, donc je suppose que c'est pas officiellement supportéEXTRATESTOPTS=--list-tests
comme variable d’environnement, avant de lancer (inner) make@ EDIT0:
Après le commentaire de @amohr, j’ai décidé de jouer un peu plus, alors j’ai exécuté tout le processus:
configure
(opte)make
(opte)make install
sur une Lnx _ (Ubtu16) machine avec 2 CPU s, où une analyse (complète) dure environ 24 minutes. Voici mes conclusions (Python3.6):
test
(make test
) invoquée par install
En ce qui concerne le 1st test, en vérifiant la sortie de Makefile, et make, voici ce que j'ai découvert qui se passe à la 2dakota du Nord (make
) étape:
-fprofile-generate
de gcc _ a été remplacé par -fprofile-use -fprofile-correction
- check [GNU]: Options contrôlant l'optimisation pour plus de détails ) pour utiliser les informations de profil générées à la (sous) étape précédenteSauter le 1st le test impliquerait automatiquement aucune optimisation. Mode (s) de réalisation:
make build_all
(à 2dakota du Nord étape) - comme suggéré par d'autres réponses
Voici un extrait de la (racine) Makefile générée par configure (avec l'option--enable-optimizations
):
all: profile-opt
build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \
Programs/_testembed python-config
Et voici un sans le:
all: build_all
build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \
Programs/_testembed python-config
Comme vu, en cours d'exécution:
configure --enable-optimizations
make build_all
est identique à:
configure
make
configure --enable-optimizations
) et 2nr (make
) étapes: PROFILE_TASK=-m test.regrtest --pgo
(pour moi, c'était autour de la ligne ~ 250)--list-tests
à la finla cible par défaut pour les constructions optimisées inclut l'exécution des tests . pour les ignorer, essayez:
make -C dl/Python-${PYTHON_VERSION} -j8 build_all
il suffit de construire et d'installer avec
make -j8 build_all
make -j8 altinstall