From ffdd5238420b498d94f41f8df0dee20c6dff90e1 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Fri, 2 Mar 2018 12:42:56 -0500 Subject: [PATCH] support for editable Signed-off-by: Kenneth Reitz --- pipenv/patched/pip/utils/packaging.py | 4 +-- pipenv/resolver.py | 41 +++++++++++++++++++-------- pipenv/utils.py | 6 +++- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/pipenv/patched/pip/utils/packaging.py b/pipenv/patched/pip/utils/packaging.py index 5cddff81..90cfd30f 100644 --- a/pipenv/patched/pip/utils/packaging.py +++ b/pipenv/patched/pip/utils/packaging.py @@ -29,7 +29,7 @@ def check_requires_python(requires_python): return True requires_python_specifier = specifiers.SpecifierSet(requires_python) # We only use major.minor.micro - python_version = version.parse(os.environ['PIP_PYTHON_VERSION']) + python_version = version.parse('{0}.{1}.{2}'.format(*sys.version_info[:3])) return python_version in requires_python_specifier @@ -53,7 +53,7 @@ def check_dist_requires_python(dist): "%s requires Python '%s' but the running Python is %s" % ( dist.project_name, requires_python, - os.environ['PIP_PYTHON_VERSION'] + '{0}.{1}.{2}'.format(*sys.version_info[:3]) ) ) except specifiers.InvalidSpecifier as e: diff --git a/pipenv/resolver.py b/pipenv/resolver.py index 8401811f..e944a96d 100644 --- a/pipenv/resolver.py +++ b/pipenv/resolver.py @@ -1,6 +1,7 @@ """Pipenv Resolveer. Usage: + resolver.py resolver.py ... [--verbose] [--pre] [--clear] resolver.py (-h | --help) resolver.py --version @@ -17,34 +18,50 @@ import os import sys import json +os.environ['PIP_PYTHON_PATH'] = sys.executable + for _dir in ('vendor', 'patched', '..'): dirpath = os.path.sep.join([os.path.dirname(__file__), _dir]) sys.path.insert(0, dirpath) -import pipenv.project +import pipenv.utils import pipenv.core -from pipenv.utils import * -from docopt import docopt -args = docopt(__doc__) -is_verbose = args['--verbose'] -do_pre = args['--pre'] -do_clear = args['--clear'] -packages = args[''] +def cleanup_sysargv(argv): -project = pipenv.core.project + new = [] + for arg in argv.copy(): + if arg.startswith('-e '): + new.append(arg) + del argv[argv.index(arg)] -os.environ['PIP_PYTHON_PATH'] = sys.executable + return argv[1:], new def which(*args, **kwargs): return sys.executable -def resolve(packages, pre=do_pre, sources=project.sources, verbose=is_verbose, clear=do_clear): +def resolve(packages, pre, sources, verbose, clear): return pipenv.utils.resolve_deps(packages, which, project=project, pre=pre, sources=sources, clear=clear, verbose=verbose) if __name__ == '__main__': - results = resolve(packages) + + argv, new_packages = cleanup_sysargv(sys.argv) + from docopt import docopt + + args = docopt(__doc__, argv=argv) + + is_verbose = args['--verbose'] + do_pre = args['--pre'] + do_clear = args['--clear'] + packages = args[''] + + for package in new_packages: + packages.append(package) + + project = pipenv.core.project + + results = resolve(packages, pre=do_pre, sources=project.sources, verbose=is_verbose, clear=do_clear) print('XYZZY') if results: print(json.dumps(results)) diff --git a/pipenv/utils.py b/pipenv/utils.py index a3f65b7a..e9a36a55 100644 --- a/pipenv/utils.py +++ b/pipenv/utils.py @@ -342,13 +342,17 @@ def venv_resolve_deps(deps, which, project, pre=False, verbose=False, clear=Fals import json resolver = shellquote(resolver.__file__.rstrip('co')) - cmd = '{0} {1} {2} {3} {4}'.format(which('python'), resolver, " ".join(deps), '--pre' if pre else '', '--verbose' if verbose else '') + cmd = '{0} {1} {2} {3} {4}'.format(which('python'), resolver, " ".join([shellquote(dep) for dep in deps]), '--pre' if pre else '', '--verbose' if verbose else '') + + # print(cmd) c = delegator.run(cmd, block=True) + print(c.out) try: assert c.return_code == 0 except AssertionError: + print(c.err) return [] if verbose: