我从源代码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文件的一部分。
6条答案
按热度按时间shyt4zoc1#
configure选项
--enable-optimizations
允许运行测试套件来生成Python性能分析所需的数据。生成的python二进制文件在执行python代码时具有更好的性能。来自维基百科
简而言之,在使用
--enable-optimizations
时不应跳过测试,因为分析所需的数据是通过运行测试生成的。您可以先运行make -j8 build_all
,然后运行make -j8 install
来跳过测试一次(测试仍将使用install
目标运行),但这将无法达到目的。您可以改为删除configure标志以缩短构建时间。sf6xfgos2#
只需构建并安装
zmeyuzjn3#
我做了一些(快速)研究,在构建 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) 上找到。进一步的研究表明,可以跳过(上面的)测试运行。您需要做的是:
备注:
EXTRATESTOPTS=--list-tests
设置为环境变量@EDIT0:
@amohr的评论之后,我决定再玩一点,所以我跑了整个过程:
1.* 配置 *(选项)
1.make(选择)
make install
在一个 Lnx(Ubtu 16)机器上,2 CPU,其中一个(完整的)测试运行需要大约24分钟。下面是我的发现(Python 3.6):
make test
)上运行,该目标由 install 目标调用1.关于第一次测试运行,通过检查 Makefile 和 make 的输出,我发现在第二步(make)中会发生以下情况:
1.C 源“正常”构建
1.正在运行测试(我推断某些配置文件数据存储在某个地方)
1.C 源代码使用不同的标志重新构建(例如,在我的示例中,gcc 的
-fprofile-generate
被-fprofile-use -fprofile-correction
替换(有关详细信息,请查看[GNU.GCC]: Options That Control Optimization)),以利用在上一(子)步骤中生成的概要文件信息make build_all
(第2步)-如其他答案所示--enable-optimizations
)生成的(根)Makefile 的代码片段:1.如所见,跑步:
configure --enable-optimizations
make build_all
个等同于:
configure
make
configure --enable-optimizations
)和第二个(make)步骤之间手动修改(root)Makefile:PROFILE_TASK=-m test.regrtest --pgo
(对我来说它是在第 *~250行左右 *)--list-tests
q5iwbnjs4#
优化构建的缺省构建目标包括运行测试。要跳过它们,请尝试:
weylhg0b5#
我们在python 3.7.6中遇到了同样的问题,基于Makefile的逆向工程,我们发现以下步骤可以在运行测试的同时快速构建python(这样我们就不会丢失on --enable-optimization标志)
关键是通过传递-j8并行运行python测试。
zbdgwd5y6#
测试的第一部分是优化代码所必需的。简单地说,你不能/不应该跳过它。