我从源tar编译python。一切正常,但测试运行2小时和两次。如何绕过这些测试?
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
此命令运行测试两次:
make -C dl/Python-${PYTHON_VERSION} -j8
make -C dl/Python-${PYTHON_VERSION} -j8 install
P.S。这是另一个make文件的一部分。
答案 0 :(得分:35)
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
跳过测试一次(测试仍会以install
目标运行),但这样做会失败。
您可以改为删除configure标志以获得更好的构建时间。
答案 1 :(得分:6)
我通过指示:
在构建 Python 时跳过测试运行做了一些(快速)研究。--without-tests
,--disable-tests
,--skip-tests
)前者没有结果。后者(通过查看 Makefile 模板)显示了通过调用 $ {PYTHON_SRC_DIR} /Tools/scripts/run_tests.py 调用测试执行的事实(其中设置了一些)东西,调用另一个脚本,调用另一个,...)。
请注意,我在 Python 3.5(.4)和 Python 3.6(.4)上找到了该文件,但在 > Python 2.7(.14)。更多的研究表明,可以跳过(上面)测试运行。你需要做的是:
make -C dl/Python-${PYTHON_VERSION} -j8 EXTRATESTOPTS=--list-tests install
备注强>:
EXTRATESTOPTS=--list-tests
设置为环境变量 make <强> @ EDIT0 强>:
在@amohr的评论之后,我决定多玩一点,所以我跑了整个过程:
make install
在具有2个 CPU 的 Lnx ( Ubtu 16 )计算机上,其中一次(完整)测试运行大约需要24分钟。以下是我的发现( Python 3.6 ):
make test
)上,由 install < / em> target 关于1 st 测试运行,通过检查 Makefile 和 make 的输出,这里&# 39;我发现的事情发生在2 nd ( make )步骤:
-fprofile-generate
被-fprofile-use -fprofile-correction
取代(检查[GNU.GCC]: Options That Control Optimization以获取更多详细信息))以使用在先前(子)步骤生成的配置文件信息跳过1 st 测试运行会自动暗示无优化。实现方式:
make build_all
(2 nd 步骤) - 正如其他答案所示
此处&#39; configure 生成的(root) Makefile 的片段(带 --enable-optimizations
) :
all: profile-opt
build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \
Programs/_testembed python-config
这里有一个没有:
all: build_all
build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \
Programs/_testembed python-config
如图所示,正在运行:
configure --enable-optimizations
make build_all
与:
相同configure
make
在1 st (configure --enable-optimizations
)和2 nd (之间手动修改(root) Makefile > make )步骤:
PROFILE_TASK=-m test.regrtest --pgo
(对我而言,它是 ~250 行--list-tests
答案 2 :(得分:4)
优化构建的默认构建目标包括运行测试。 要跳过它们,请尝试:
make -C dl/Python-${PYTHON_VERSION} -j8 build_all
答案 3 :(得分:1)
只需构建并安装
make -j8 build_all
make -j8 altinstall
答案 4 :(得分:0)
我们在使用 python 3.7.6 时遇到了同样的问题,并且基于对 Makefile 的逆向工程,发现以下步骤也可以在运行测试的同时快速构建 python(这样我们就不会丢失 --enable-optimization 标志)
cd /home/ubuntu
PYTHON_VER=3.7.6
wget https://www.python.org/ftp/python/$PYTHON_VER/Python-$PYTHON_VER.tgz
tar xvf Python-$PYTHON_VER.tgz
cd Python-$PYTHON_VER/
./configure --enable-loadable-sqlite-extensions --enable-optimizations
make profile-gen-stamp; ./python -m test.regrtest --pgo -j8; make build_all_merge_profile; touch profile-run-stamp; make
make install
关键是通过将 -j8 传递给它来并行运行 python 测试。