diff options
| author | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-05-16 15:08:28 -0400 | 
|---|---|---|
| committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-05-16 15:08:28 -0400 | 
| commit | bed4ca37788e91e09250401c4d65f36067487c1e (patch) | |
| tree | e92e7defa65d2496defcc8ae22dc469ee5d99378 | |
| parent | 23d48d07eabce55d92c811f2809ef3a48a6bb5dd (diff) | |
| download | delivery_merge-bed4ca37788e91e09250401c4d65f36067487c1e.tar.gz | |
Fix loss of environment between execution
| -rw-r--r-- | delivery_merge/cli/merge.py | 3 | ||||
| -rw-r--r-- | delivery_merge/conda.py | 32 | ||||
| -rw-r--r-- | delivery_merge/merge.py | 40 | ||||
| -rw-r--r-- | delivery_merge/utils.py | 3 | 
4 files changed, 57 insertions, 21 deletions
diff --git a/delivery_merge/cli/merge.py b/delivery_merge/cli/merge.py index 45adf64..a9b94b4 100644 --- a/delivery_merge/cli/merge.py +++ b/delivery_merge/cli/merge.py @@ -1,5 +1,5 @@  import os -from ..conda import conda, conda_installer, conda_init_path +from ..conda import conda, conda_installer, conda_init_path, ei_touch  from ..merge import (      env_combine,      testable_packages, @@ -44,6 +44,7 @@ def main():      prefix = conda_installer(args.installer_version)      conda_init_path(prefix) +    ei_touch()      if not os.path.exists(os.path.join(prefix, 'envs', name)):          print(f"Creating environment {name}...") diff --git a/delivery_merge/conda.py b/delivery_merge/conda.py index cc265f1..6dd29b1 100644 --- a/delivery_merge/conda.py +++ b/delivery_merge/conda.py @@ -13,6 +13,22 @@ class BadPlatform(Exception):      pass +def ei_touch(): +    py_version = sh('python', '--version').stdout.decode().strip().split()[1] +    py_version = '.'.join(py_version.split('.')[:2]) +    root = run("python -c 'import sys; print(sys.prefix)'", +               capture_output=True, +               shell=True, +               env=os.environ).stdout.decode().strip() +    libsp = ['lib', f'python{py_version}', 'site-packages'] +    site_packages = os.path.join(root, *libsp) +    pthfile = os.path.join(site_packages, 'easy-install.pth') + +    print('PTHFILE = {}'.format(pthfile)) +    if not os.path.exists(pthfile): +        open(pthfile, 'w+').write('') + +  def conda_installer(ver, prefix='./miniconda3'):      """ Install miniconda into a user-defined prefix and return its path @@ -59,7 +75,7 @@ def conda_installer(ver, prefix='./miniconda3'):          os.chmod(installer, 0o755)      # Perform installation -    run(install_command).check_returncode() +    run(install_command, env=os.environ).check_returncode()      return prefix @@ -78,6 +94,17 @@ def conda_init_path(prefix):                                     os.environ['PATH']]) +def conda_site(): +    """ Retrieve current environment's site-packages path +    """ +    result = run("python -c 'import site; print(site.getsitepackages()[-1])'", +                 capture_output=True, +                 shell=True, +                 env=os.environ) +    result.check_returncode() +    return result.stdout.decode().strip() + +  def conda_activate(env_name):      """ Activate a conda environment @@ -90,7 +117,8 @@ def conda_activate(env_name):      """      proc = run(f". activate {env_name} && env",                 capture_output=True, -               shell=True) +               shell=True, +               env=os.environ)      proc.check_returncode()      return getenv(proc.stdout.decode()).copy() diff --git a/delivery_merge/merge.py b/delivery_merge/merge.py index f99c542..c58da77 100644 --- a/delivery_merge/merge.py +++ b/delivery_merge/merge.py @@ -1,7 +1,7 @@  import os  import re  import sys -from .conda import conda, conda_env_load, conda_cmd_channels +from .conda import conda, conda_env_load, conda_cmd_channels, ei_touch  from .utils import comment_find, git, pushd, sh  from configparser import ConfigParser  from glob import glob @@ -74,15 +74,19 @@ def env_combine(filename, conda_env, conda_channels=[]):          packages.append(f"'{record['fullspec']}'")      packages_result = ' '.join([x for x in packages]) -    proc = conda('install', '-q', '-y', -                 '-n', conda_env, -                 conda_cmd_channels(conda_channels), -                 packages_result) -    if proc.stderr: -        print(proc.stderr.decode()) +    with conda_env_load(conda_env): +        ei_touch() +        # Perform package installation +        proc = conda('install', '-q', '-y', +                     '-n', conda_env, +                     conda_cmd_channels(conda_channels), +                     packages_result) -    proc.check_returncode() +        if proc.stderr: +            print(proc.stderr.decode()) + +        proc.check_returncode()  def testable_packages(filename, prefix): @@ -159,29 +163,33 @@ def integration_test(pkg_data, conda_env, results_root='.'):              force_xunit2()              with conda_env_load(conda_env): +                ei_touch()                  results = os.path.abspath(os.path.join(results_root,                                                         repo_root,                                                         'result.xml')) -                proc_pip_install = sh("pip", "install --upgrade pip") + +                conda("uninstall", "-y", repo_root) + +                proc_pip_install = sh("python", "-m pip install --upgrade pip pytest ci-watson")                  if proc_pip_install.returncode:                      print(proc_pip_install.stdout.decode())                      print(proc_pip_install.stderr.decode()) -                proc_pip = sh("pip", "install -v -e .[test] pytest ci_watson") +                proc_pip = sh("python", "-m pip install -v .[test]")                  proc_pip_stderr = proc_pip.stderr.decode()                  if proc_pip.returncode:                      print(proc_pip.stdout.decode())                      print(proc_pip.stderr.decode()) -                # Setuptools is busted in conda. Ignore errors related to -                # easy_install.pth -                if 'easy-install.pth' not in proc_pip_stderr: -                    proc_pip.check_returncode() -                  if 'consider upgrading' not in proc_pip_stderr:                      proc_pip.check_returncode() -                proc_pytest = sh("pytest", f"-v --basetemp=.tmp --junitxml={results}") +                proc_egg = sh("python", "setup.py egg_info") +                if proc_egg.returncode: +                    print(proc_egg.stdout.decode()) +                    print(proc_egg.stderr.decode()) + +                proc_pytest = sh("python", "-m pytest", f"-v --basetemp=.tmp --junitxml={results}")                  print(proc_pytest.stdout.decode())                  if proc_pytest.returncode:                      print(proc_pytest.stderr.decode()) diff --git a/delivery_merge/utils.py b/delivery_merge/utils.py index 705eaf2..e3d43c0 100644 --- a/delivery_merge/utils.py +++ b/delivery_merge/utils.py @@ -32,7 +32,7 @@ def sh(prog, *args):      command += tmp      print(f'Running: {" ".join(command)}') -    return run(command, capture_output=True) +    return run(command, capture_output=True, env=os.environ)  def git(*args): @@ -70,4 +70,3 @@ def pushd(path):          yield      finally:          os.chdir(last) -  | 
