bpo-40669: Install PEG benchmarking dependencies in a venv (GH-20183)

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
This commit is contained in:
Lysandros Nikolaou 2020-05-18 21:27:40 +03:00 committed by GitHub
parent 2135e10dc7
commit dc31800f86
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 15 deletions

View File

@ -1,3 +1,4 @@
peg_extension/parse.c peg_extension/parse.c
data/xxl.py data/xxl.py
venv/
@data @data

View File

@ -5,7 +5,8 @@ endif
ifeq ($(UNAME_S),Darwin) ifeq ($(UNAME_S),Darwin)
PYTHON ?= ../../python.exe PYTHON ?= ../../python.exe
endif endif
VENVDIR ?= ./venv
VENVPYTHON ?= $(VENVDIR)/bin/python
CPYTHON ?= ../../Lib CPYTHON ?= ../../Lib
MYPY ?= mypy MYPY ?= mypy
@ -27,6 +28,7 @@ peg_extension/parse.c: $(GRAMMAR) $(TOKENS) pegen/*.py peg_extension/peg_extensi
clean: clean:
-rm -f peg_extension/*.o peg_extension/*.so peg_extension/parse.c -rm -f peg_extension/*.o peg_extension/*.so peg_extension/parse.c
-rm -f data/xxl.py -rm -f data/xxl.py
-rm -rf $(VENVDIR)
dump: peg_extension/parse.c dump: peg_extension/parse.c
cat -n $(TESTFILE) cat -n $(TESTFILE)
@ -41,6 +43,12 @@ regen-metaparser: pegen/metagrammar.gram pegen/*.py
.PHONY: test .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 test: run
run: peg_extension/parse.c run: peg_extension/parse.c
@ -61,22 +69,22 @@ stats: peg_extension/parse.c data/xxl.py
time: time_compile time: time_compile
time_compile: peg_extension/parse.c data/xxl.py time_compile: venv peg_extension/parse.c data/xxl.py
$(PYTHON) scripts/benchmark.py --parser=pegen --target=xxl compile $(VENVPYTHON) scripts/benchmark.py --parser=pegen --target=xxl compile
time_parse: peg_extension/parse.c data/xxl.py time_parse: venv peg_extension/parse.c data/xxl.py
$(PYTHON) scripts/benchmark.py --parser=pegen --target=xxl parse $(VENVPYTHON) scripts/benchmark.py --parser=pegen --target=xxl parse
time_check: peg_extension/parse.c data/xxl.py time_check: venv peg_extension/parse.c data/xxl.py
$(PYTHON) scripts/benchmark.py --parser=pegen --target=xxl check $(VENVPYTHON) scripts/benchmark.py --parser=pegen --target=xxl check
time_stdlib: time_stdlib_compile time_stdlib: time_stdlib_compile
time_stdlib_compile: data/xxl.py time_stdlib_compile: venv peg_extension/parse.c data/xxl.py
$(PYTHON) scripts/benchmark.py --parser=cpython --target=xxl compile $(VENVPYTHON) scripts/benchmark.py --parser=cpython --target=xxl compile
time_stdlib_parse: data/xxl.py time_stdlib_parse: venv peg_extension/parse.c data/xxl.py
$(PYTHON) scripts/benchmark.py --parser=cpython --target=xxl parse $(VENVPYTHON) scripts/benchmark.py --parser=cpython --target=xxl parse
test_local: test_local:
$(PYTHON) scripts/test_parse_directory.py \ $(PYTHON) scripts/test_parse_directory.py \
@ -105,8 +113,8 @@ mypy: regen-metaparser
format-python: format-python:
black pegen scripts black pegen scripts
bench: bench: venv
$(PYTHON) scripts/benchmark.py --parser=pegen --target=stdlib check $(VENVPYTHON) scripts/benchmark.py --parser=pegen --target=stdlib check
format: format-python format: format-python

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python3.9 #!/usr/bin/env python3
import argparse import argparse
import ast import ast
@ -6,7 +6,12 @@ import sys
import os import os
from time import time 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()) sys.path.insert(0, os.getcwd())
from peg_extension import parse from peg_extension import parse