]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40669: Install PEG benchmarking dependencies in a venv (GH-20183)
authorLysandros Nikolaou <lisandrosnik@gmail.com>
Mon, 18 May 2020 18:27:40 +0000 (21:27 +0300)
committerGitHub <noreply@github.com>
Mon, 18 May 2020 18:27:40 +0000 (11:27 -0700)
Create a `make venv` target, that creates a virtual environment
and installs the dependency in that venv. `make time` and all
the related targets are changed to use the virtual environment
python.

Automerge-Triggered-By: @pablogsal
Tools/peg_generator/.gitignore
Tools/peg_generator/Makefile
Tools/peg_generator/scripts/benchmark.py

index 91c41f89e8cb538bf83e070ce9933fc888ed8541..f25e54195e4c94fde7371129c22b4fbc0ae71c94 100644 (file)
@@ -1,3 +1,4 @@
 peg_extension/parse.c
 data/xxl.py
+venv/
 @data
index c1219b92638516bd614d99d596eb205f06a25c76..7b33a86b24a8b2771ed3468a0b2795a0b786d8a6 100644 (file)
@@ -5,7 +5,8 @@ endif
 ifeq ($(UNAME_S),Darwin)
        PYTHON ?= ../../python.exe
 endif
-
+VENVDIR ?= ./venv
+VENVPYTHON ?= $(VENVDIR)/bin/python
 CPYTHON ?= ../../Lib
 MYPY ?= mypy
 
@@ -27,6 +28,7 @@ peg_extension/parse.c: $(GRAMMAR) $(TOKENS) pegen/*.py peg_extension/peg_extensi
 clean:
        -rm -f peg_extension/*.o peg_extension/*.so peg_extension/parse.c
        -rm -f data/xxl.py
+       -rm -rf $(VENVDIR)
 
 dump: peg_extension/parse.c
        cat -n $(TESTFILE)
@@ -41,6 +43,12 @@ regen-metaparser: pegen/metagrammar.gram pegen/*.py
 
 .PHONY: test
 
+venv:
+       $(PYTHON) -m venv $(VENVDIR)
+       $(VENVPYTHON) -m pip install -U pip setuptools
+       $(VENVPYTHON) -m pip install -U memory_profiler
+       @echo "The venv has been created in the $(VENVDIR) directory"
+
 test: run
 
 run: peg_extension/parse.c
@@ -61,22 +69,22 @@ stats: peg_extension/parse.c data/xxl.py
 
 time: time_compile
 
-time_compile: peg_extension/parse.c data/xxl.py
-       $(PYTHON) scripts/benchmark.py --parser=pegen --target=xxl compile
+time_compile: venv peg_extension/parse.c data/xxl.py
+       $(VENVPYTHON) scripts/benchmark.py --parser=pegen --target=xxl compile
 
-time_parse: peg_extension/parse.c data/xxl.py
-       $(PYTHON) scripts/benchmark.py --parser=pegen --target=xxl parse
+time_parse: venv peg_extension/parse.c data/xxl.py
+       $(VENVPYTHON) scripts/benchmark.py --parser=pegen --target=xxl parse
 
-time_check: peg_extension/parse.c data/xxl.py
-       $(PYTHON) scripts/benchmark.py --parser=pegen --target=xxl check
+time_check: venv peg_extension/parse.c data/xxl.py
+       $(VENVPYTHON) scripts/benchmark.py --parser=pegen --target=xxl check
 
 time_stdlib: time_stdlib_compile
 
-time_stdlib_compile: data/xxl.py
-       $(PYTHON) scripts/benchmark.py --parser=cpython --target=xxl compile
+time_stdlib_compile: venv peg_extension/parse.c data/xxl.py
+       $(VENVPYTHON) scripts/benchmark.py --parser=cpython --target=xxl compile
 
-time_stdlib_parse: data/xxl.py
-       $(PYTHON) scripts/benchmark.py --parser=cpython --target=xxl parse
+time_stdlib_parse: venv peg_extension/parse.c data/xxl.py
+       $(VENVPYTHON) scripts/benchmark.py --parser=cpython --target=xxl parse
 
 test_local:
        $(PYTHON) scripts/test_parse_directory.py \
@@ -105,8 +113,8 @@ mypy: regen-metaparser
 format-python:
        black pegen scripts
 
-bench:
-       $(PYTHON) scripts/benchmark.py --parser=pegen --target=stdlib check
+bench: venv
+       $(VENVPYTHON) scripts/benchmark.py --parser=pegen --target=stdlib check
 
 format: format-python
 
index d39ac3dca79e7d3ebe120587e762a4ebb6225648..4942b99b6619fe61eb2cf495bd20092473f6ab33 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3.9
+#!/usr/bin/env python3
 
 import argparse
 import ast
@@ -6,7 +6,12 @@ import sys
 import os
 from time import time
 
-import memory_profiler
+try:
+    import memory_profiler
+except ModuleNotFoundError:
+    print("Please run `make venv` to create a virtual environment and install"
+          " all the dependencies, before running this script.")
+    sys.exit(1)
 
 sys.path.insert(0, os.getcwd())
 from peg_extension import parse