Skip to content

Commit

Permalink
add pip installation tests
Browse files Browse the repository at this point in the history
includes working example of advanced pip use
  • Loading branch information
sdvillal committed Jan 9, 2017
1 parent 4bf3bf7 commit 4047934
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 4 deletions.
1 change: 1 addition & 0 deletions tests/conda_env/support/advanced-pip/.gitignore
@@ -0,0 +1 @@
src
@@ -0,0 +1 @@
six
29 changes: 29 additions & 0 deletions 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...
@@ -0,0 +1,6 @@
from setuptools import setup

setup(
name='module_to_install_in_editable_mode',
packages=[],
)
23 changes: 19 additions & 4 deletions 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
Expand Down Expand Up @@ -78,17 +79,17 @@ 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:
return dist in packages
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))

Expand All @@ -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-<pip>', exact=True, pip=True)

0 comments on commit 4047934

Please sign in to comment.