def test_roundtrip(tmpdir, py36_env): out_path = os.path.join(str(tmpdir), 'py36.tar') py36_env.pack(out_path) assert os.path.exists(out_path) assert tarfile.is_tarfile(out_path) with tarfile.open(out_path) as fil: # Check all files are relative paths for member in fil.getnames(): assert not member.startswith(os.path.sep) extract_path = str(tmpdir) fil.extractall(extract_path) # Shebang rewriting happens before prefixes are fixed textfile = os.path.join(extract_path, 'bin', 'conda-pack-test-lib1') with open(textfile, 'r') as fil: shebang = fil.readline().strip() assert shebang == '#!/usr/bin/env python' # Check conda-unpack --help and --version conda_unpack = '%s/bin/conda-unpack' % extract_path out = subprocess.check_output([conda_unpack, '--help'], stderr=subprocess.STDOUT).decode() assert out.startswith('usage: conda-unpack') out = subprocess.check_output([conda_unpack, '--version'], stderr=subprocess.STDOUT).decode() assert out.startswith('conda-unpack') # Check no prefix generated for python executable python_pattern = re.compile('bin/python\d.\d') conda_unpack_mod = load_source('conda_unpack', conda_unpack) pythons = [ r for r in conda_unpack_mod._prefix_records if python_pattern.match(r[0]) ] assert not pythons # Check bash scripts all don't error command = (". {path}/bin/activate && " "conda-unpack && " ". {path}/bin/deactivate && " "echo 'Done'").format(path=extract_path) out = subprocess.check_output(['/usr/bin/env', 'bash', '-c', command], stderr=subprocess.STDOUT).decode() assert out == 'Done\n'
def test_roundtrip(tmpdir, py36_env): out_path = os.path.join(str(tmpdir), 'py36.tar') py36_env.pack(out_path) assert os.path.exists(out_path) assert tarfile.is_tarfile(out_path) with tarfile.open(out_path) as fil: # Check all files are relative paths for member in fil.getnames(): assert not member.startswith(os.path.sep) extract_path = str(tmpdir.join('env')) fil.extractall(extract_path) # Shebang rewriting happens before prefixes are fixed textfile = os.path.join(extract_path, BIN_DIR, 'conda-pack-test-lib1') with open(textfile, 'r') as fil: shebang = fil.readline().strip() assert shebang == '#!/usr/bin/env python' # Check conda-unpack --help and --version if on_win: binary_name = 'conda-unpack.exe' script_name = 'conda-unpack-script.py' else: binary_name = script_name = 'conda-unpack' conda_unpack = os.path.join(extract_path, BIN_DIR, binary_name) conda_unpack_script = os.path.join(extract_path, BIN_DIR, script_name) out = subprocess.check_output([conda_unpack, '--help'], stderr=subprocess.STDOUT).decode() assert out.startswith('usage: conda-unpack') out = subprocess.check_output([conda_unpack, '--version'], stderr=subprocess.STDOUT).decode() assert out.startswith('conda-unpack') # Check no prefix generated for python executable python_pattern = re.compile(r'bin/python\d.\d') conda_unpack_mod = load_source('conda_unpack', conda_unpack_script) pythons = [ r for r in conda_unpack_mod._prefix_records if python_pattern.match(r[0]) ] assert not pythons if on_win: command = (r"@call {path}\Scripts\activate.bat && " "conda-unpack.exe && " r"call {path}\Scripts\deactivate.bat && " "echo Done").format(path=extract_path) unpack = tmpdir.join('unpack.bat') unpack.write(command) out = subprocess.check_output( ['cmd.exe', '/c', str(unpack)], stderr=subprocess.STDOUT).decode() assert out == 'Done\r\n' else: # Check bash scripts all don't error command = (". {path}/bin/activate && " "conda-unpack && " ". {path}/bin/deactivate && " "echo 'Done'").format(path=extract_path) out = subprocess.check_output(['/usr/bin/env', 'bash', '-c', command], stderr=subprocess.STDOUT).decode() assert out == 'Done\n'