web-dev-qa-db-ja.com

Make(ソースからインストール)pythonテストを実行せずに

ソースtarからpython。

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

結果として

make 7724,86s user 188,63s system 101% cpu 2:10:18,93 total

このように配布します

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

このコマンドは、テストを2回実行します。

make -C dl/Python-${PYTHON_VERSION} -j8 
make -C dl/Python-${PYTHON_VERSION} -j8 install

追伸これは別のメイクファイルの一部です。

29
eri

Configureオプション--enable-optimizationsを使用すると、テストスイートを実行してPythonのプロファイリング用のデータを生成できます。結果のpythonバイナリは、pythonコードを実行する際のパフォーマンスが向上します。改善点は here

From configure help:
--enable-optimizations  Enable expensive optimizations (PGO, etc). Disabled by default.

ウィキペディアから

 profile-guided optimisation uses the results of profiling test runs of the instrumented program to optimize the final generated code.

要するに、プロファイリングに必要なデータはテストの実行によって生成されるため、-enable-optimizationsを使用する場合、テストをスキップしないでください。 make -j8 build_allに続いてmake -j8 installを実行すると、テストを1回スキップできます(テストはinstallターゲットで実行されます)が、それでは目的が達成できません。代わりに、構成時間を短縮するために構成フラグをドロップできます。

42
nit

Pythonをビルドするときに、次のいずれかを指示することにより、テストの実行をスキップすることに関するいくつかの(クイック)研究を行いました。

  • configure-いくつかの引数を渡す(例:--without-tests--disable-tests--skip-tests
  • make-何らかの変数を指定する(envvar sまたはcmdline

前者では結果が得られませんでした。後者は(Makefileテンプレートを調べることで)$ {PYTHON_SRC_DIR} /Tools/scripts/run_tests.py(いくつかのものを設定し、別のスクリプトを呼び出し、別のスクリプトを呼び出します、...)。
ファイルはPython 3.5(.4)およびPython 3.6(.4)にありますが、notPython 2.7(.14)。もう少し調査したところ、(上記の)テスト実行をスキップできることが明らかになりました。あなたがする必要があるのは:

make -C dl/Python-${PYTHON_VERSION} -j8 EXTRATESTOPTS=--list-tests install

Notes

  • Google ingは[〜#〜] extratestopts [〜#〜]で(関連)何も明らかにしなかったので、正式にはサポートされていません
  • (内部)makeを起動する前に、環境変数としてEXTRATESTOPTS=--list-testsを設定することもできます
  • 言うまでもなく、ビルド中に「マイナー」エラーが発生した場合(たとえば、_ssl.soなどの重要でない外部モジュールがビルドに失敗した場合)、失敗するテストはありません。実行時にのみ検出されます(本番環境で発生するとひどく厄介になります)

@ EDIT

@amohrのコメントの後、もう少しプレイすることに決めたので、プロセス全体を実行しました。

  1. configure(opts)
  2. make(最適化)
  3. make install

2つの[〜#〜] cpu [〜#〜] sを含むLnxbtu 16)マシンで、1回の(完全な)テスト実行に〜24分。これが私の発見です(Python 3.6):

  • それはPython 3.5(.4)正常に実行されました
  • 先ほど提案したソリューションは、rd ステップなので、the 2だけをスキップしますnd テストの実行:(ルート)Makefiletestターゲット(make test)がinstallターゲット
  • 1についてst Makefile、およびmakeの出力を確認して、テストを実行します。nd (make)ステップ:

    1. [〜#〜] c [〜#〜]ソースは「通常」に構築されます
    2. テストが実行されています(プロファイルデータがどこかに保存されていると推測しました)
    3. [〜#〜] c [〜#〜]ソースは、異なるフラグで再構築されます(たとえば、私の場合、gcc-fprofile-generate-fprofile-use -fprofile-correctionに置き換えられました(チェック [GNU。 GCC]:最適化を制御するオプション 詳細については)))前の(サブ)ステップで生成されたプロファイル情報を使用する
  • 1をスキップst テスト実行は自動的にno最適化を意味します。達成方法:

    1. make build_all(at 2nd ステップ)-他の回答が示唆するとおり

      • configurewith--enable-optimizations)によって生成された(ルート)Makefileのスニペットは次のとおりです。

        all:            profile-opt
        build_all:      check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \
                        Programs/_testembed python-config
        
      • そして、これはwithoutitです:

        all:            build_all
        build_all:      check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \
                        Programs/_testembed python-config
        
      • 見られるように、実行中:

        1. configure --enable-optimizations
        2. make build_all

        以下と同じです:

        1. configure
        2. make
    2. (ルート)Makefileを1の間で手動で変更しますst (configure --enable-optimizations)および2nd (make)ステップ:

      • マクロ定義PROFILE_TASK=-m test.regrtest --pgoを見つけます(私にとっては〜25行あたりでした)
      • 最後に--list-testsを追加します
      • サブステップ(#2。#1。および(#2。# 3.はまったく同じですが、(#2。#2。の場合、テストは実行されていません。それは次のいずれかを意味します:
        • 2nd ソースのビルドは1と同じですst 1つ(これは完全に役に立たないでしょう)
        • 2nd (情報を持たずに)いくつかの最適化を行います。これは、実行時にクラッシュする可能性があることを意味します(前者の場合だと思います)
7
CristiFati

最適化されたビルドのデフォルトのビルドターゲットには、テストの実行が含まれます。それらをスキップするには、試してください:

 make -C dl/Python-${PYTHON_VERSION} -j8 build_all
4
umläute

ビルドしてインストールするだけです

make -j8 build_all
make -j8 altinstall
2
David Ding