pip_use_prefix.py 1.27 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""
 0. Create a directory whose name is sys.argv[1].
 1. Create a "pip-install" script that uses this directory as prefix.
 2. Set PYTHONPATH to use this prefix, via VSO variable.
"""

import os
from pathlib import Path
import sys
import typing

prefix = Path(sys.argv[1])
prefix.mkdir(parents=True, exist_ok=True)
prefix = prefix.resolve()

if sys.platform == 'win32':
    # Do not use CMD script. It will magically stop pipeline step.
    script = f'python -m pip install --prefix {prefix} --no-compile --prefer-binary $args'
    Path('pip-install.ps1').write_text(script + '\n')
else:
    script = f'python -m pip install --prefix {prefix} --no-compile --prefer-binary "$@"'
    Path('pip-install').write_text('#!/bin/bash\n' + script + '\n')
    os.chmod('pip-install', 0o775)

if sys.platform == 'win32':
    site_path = prefix / 'Lib/site-packages'
else:
    version = f'{sys.version_info.major}.{sys.version_info.minor}'
    site_path = prefix / f'lib/python{version}/site-packages'
paths = [
    Path(typing.__file__).parent,  # With PYTHONPATH, the backport version of typing will mask stdlib version.
    site_path,
    os.getenv('PYTHONPATH'),
]
path = os.pathsep.join(str(p) for p in paths if p)

print('PYTHONPATH:', path)
print('##vso[task.setvariable variable=PYTHONPATH]' + path)