def do_test(dirname): envdir = os.path.join(dirname, "myenv") # don't specify a python version so we use the one we already have # in the root env, otherwise this might take forever. conda_api.create(prefix=envdir, pkgs=['python']) assert os.path.isdir(envdir) assert os.path.isdir(os.path.join(envdir, "conda-meta")) # test that we can install a package via pip assert not os.path.exists(os.path.join(envdir, FLAKE8_BINARY)) pip_api.install(prefix=envdir, pkgs=['flake8']) assert os.path.exists(os.path.join(envdir, FLAKE8_BINARY)) # list what was installed installed = pip_api.installed(prefix=envdir) assert 'flake8' in installed assert installed['flake8'][0] == 'flake8' assert installed['flake8'][1] is not None # test that we can remove it again pip_api.remove(prefix=envdir, pkgs=['flake8']) assert not os.path.exists(os.path.join(envdir, FLAKE8_BINARY)) # no longer in the installed list installed = pip_api.installed(prefix=envdir) assert 'flake8' not in installed
def remove_packages(self, prefix, packages, pip=False): if pip: try: pip_api.remove(prefix, packages, stdout_callback=self._on_stdout, stderr_callback=self._on_stderr) except pip_api.PipError as e: raise CondaManagerError( 'Failed to remove pip packages from {}: {}'.format( prefix, str(e))) else: try: conda_api.remove(prefix, packages, stdout_callback=self._on_stdout, stderr_callback=self._on_stderr) except conda_api.CondaError as e: raise CondaManagerError( "Failed to remove packages from %s: %s" % (prefix, str(e)))
def do_test(dirname): envdir = os.path.join(dirname, "myenv") conda_api.create(prefix=envdir, pkgs=['python']) # no packages to install with pytest.raises(TypeError) as excinfo: pip_api.install(prefix=envdir, pkgs=[]) assert 'must specify a list' in repr(excinfo.value) # no packages to remove with pytest.raises(TypeError) as excinfo: pip_api.remove(prefix=envdir, pkgs=[]) assert 'must specify a list' in repr(excinfo.value) # pip command not installed from os.path import exists as real_exists def mock_exists(path): if path.endswith("pip") or path.endswith("pip.exe"): return False else: return real_exists(path) monkeypatch.setattr('os.path.exists', mock_exists) with pytest.raises(pip_api.PipNotInstalledError) as excinfo: pip_api.install(prefix=envdir, pkgs=['foo']) assert 'command is not installed in the environment' in repr( excinfo.value) installed = pip_api.installed(prefix=envdir) assert dict( ) == installed # with pip not installed, no packages are listed. # pip command exits nonzero error_script = """from __future__ import print_function import sys print("TEST_ERROR", file=sys.stderr) sys.exit(1) """ def get_failed_command(prefix, extra_args): return tmp_script_commandline(error_script) monkeypatch.setattr( 'anaconda_project.internal.pip_api._get_pip_command', get_failed_command) with pytest.raises(pip_api.PipError) as excinfo: pip_api.install(prefix=envdir, pkgs=['flake8']) assert 'TEST_ERROR' in repr(excinfo.value) # pip command exits zero printing stuff on stderr error_message_but_success_script = """from __future__ import print_function import sys print("TEST_ERROR", file=sys.stderr) sys.exit(0) """ def get_failed_command(prefix, extra_args): return tmp_script_commandline(error_message_but_success_script) monkeypatch.setattr( 'anaconda_project.internal.pip_api._get_pip_command', get_failed_command) pip_api.install(prefix=envdir, pkgs=['flake8']) # cannot exec pip def mock_popen(args, stdout=None, stderr=None): raise OSError("failed to exec") monkeypatch.setattr('subprocess.Popen', mock_popen) with pytest.raises(pip_api.PipError) as excinfo: pip_api.install(prefix=envdir, pkgs=['flake8']) assert 'failed to exec' in repr(excinfo.value)