diff --git a/tests/conda_env/support/advanced-pip/.gitignore b/tests/conda_env/support/advanced-pip/.gitignore new file mode 100644 index 00000000000..85de9cf9334 --- /dev/null +++ b/tests/conda_env/support/advanced-pip/.gitignore @@ -0,0 +1 @@ +src diff --git a/tests/conda_env/support/advanced-pip/another-project-requirements.txt b/tests/conda_env/support/advanced-pip/another-project-requirements.txt new file mode 100644 index 00000000000..ffe2fce4989 --- /dev/null +++ b/tests/conda_env/support/advanced-pip/another-project-requirements.txt @@ -0,0 +1 @@ +six diff --git a/tests/conda_env/support/advanced-pip/environment.yml b/tests/conda_env/support/advanced-pip/environment.yml new file mode 100644 index 00000000000..3a67976643b --- /dev/null +++ b/tests/conda_env/support/advanced-pip/environment.yml @@ -0,0 +1,29 @@ +name: advanced-pip-example + +dependencies: + - pip + - pip: + + # Global options can be tweaked. + # For example, if you want to use a pypi mirror first: + - --index-url https://pypi.doubanio.com/simple + - --extra-index-url https://pypi.python.org/simple + # (check https://www.pypi-mirrors.org/) + + # Current syntax still works + - xmltodict==0.10.2 + + # Install in editable mode. + # More natural than - "--editable=git+https://github.com/neithere/argh.git#egg=argh + - -e git+https://github.com/neithere/argh.git#egg=argh + + # You could also specify a package in a directory. + # The directory can be relative to this environment file. + - -e ./module_to_install_in_editable_mode + + # Use another requirements file. + # Note that here also we can use relative paths. + # pip will be run from the environment file directory, if provided. + - -r another-project-requirements.txt + + # Anything else that pip requirement files allows should work seamlessly... diff --git a/tests/conda_env/support/advanced-pip/module_to_install_in_editable_mode/setup.py b/tests/conda_env/support/advanced-pip/module_to_install_in_editable_mode/setup.py new file mode 100644 index 00000000000..537550c86f0 --- /dev/null +++ b/tests/conda_env/support/advanced-pip/module_to_install_in_editable_mode/setup.py @@ -0,0 +1,6 @@ +from setuptools import setup + +setup( + name='module_to_install_in_editable_mode', + packages=[], +) diff --git a/tests/conda_env/test_create.py b/tests/conda_env/test_create.py index ff9ade6b1f7..12ecd52d972 100644 --- a/tests/conda_env/test_create.py +++ b/tests/conda_env/test_create.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, division, print_function +from conda.egg_info import get_egg_info from conda.exports import text_type from contextlib import contextmanager from logging import getLogger, Handler @@ -78,8 +79,8 @@ def make_temp_envs_dir(): rmtree(envs_dir, ignore_errors=True) -def package_is_installed(prefix, dist, exact=False): - packages = list(linked(prefix)) +def package_is_installed(prefix, dist, exact=False, pip=False): + packages = list(get_egg_info(prefix) if pip else linked(prefix)) if '::' not in text_type(dist): packages = [p.dist_name for p in packages] if exact: @@ -87,8 +88,8 @@ def package_is_installed(prefix, dist, exact=False): return any(p.startswith(dist) for p in packages) -def assert_package_is_installed(prefix, package, exact=False): - if not package_is_installed(prefix, package, exact): +def assert_package_is_installed(prefix, package, exact=False, pip=False): + if not package_is_installed(prefix, package, exact, pip): print(list(linked(prefix))) raise AssertionError("package {0} is not in prefix".format(package)) @@ -114,3 +115,17 @@ def test_create_update(self): run_command(Commands.UPDATE, envs_dir, env_name, utils.support_file('example/environment_pinned_updated.yml')) assert_package_is_installed(prefix, 'flask-0.10.1') assert not package_is_installed(prefix, 'flask-0.9') + + def test_create_advanced_pip(self): + with make_temp_envs_dir() as envs_dir: + env_name = str(uuid4())[:8] + prefix = join(envs_dir, env_name) + python_path = join(prefix, PYTHON_BINARY) + + run_command(Commands.CREATE, envs_dir, env_name, + utils.support_file('advanced-pip/environment.yml')) + assert exists(python_path) + assert_package_is_installed(prefix, 'argh', exact=False, pip=True) + assert_package_is_installed(prefix, 'module-to-install-in-editable-mode', exact=False, pip=True) + assert_package_is_installed(prefix, 'six', exact=False, pip=True) + assert_package_is_installed(prefix, 'xmltodict-0.10.2-', exact=True, pip=True)