2
0
mirror of https://github.com/frappe/bench.git synced 2024-06-19 08:22:20 +00:00

perf: Avoid use of glob for fetching python executable

glob on env/**/bin is slowest operation in terms of overhead on CLI.
This commit is contained in:
Ankush Menat 2024-02-23 21:07:27 +05:30
parent 7c64aa3d94
commit 8db23dd230

View File

@ -32,8 +32,13 @@ logger = logging.getLogger(bench.PROJECT_NAME)
@lru_cache(maxsize=None)
def get_env_cmd(cmd: str, bench_path: str = ".") -> str:
# this supports envs' generated by patched virtualenv or venv (which may cause an extra 'local' folder to be created)
exact_location = os.path.abspath(
os.path.join(bench_path, "env", "bin", cmd.strip("*"))
)
if os.path.exists(exact_location):
return exact_location
# this supports envs' generated by patched virtualenv or venv (which may cause an extra 'local' folder to be created)
existing_python_bins = glob(
os.path.join(bench_path, "env", "**", "bin", cmd), recursive=True
)
@ -41,8 +46,7 @@ def get_env_cmd(cmd: str, bench_path: str = ".") -> str:
if existing_python_bins:
return os.path.abspath(existing_python_bins[0])
cmd = cmd.strip("*")
return os.path.abspath(os.path.join(bench_path, "env", "bin", cmd))
return exact_location
def get_venv_path(verbose=False, python="python3"):