From be5e689cac62bb9936ec9f32837843c37a2a560a Mon Sep 17 00:00:00 2001 From: Andrew Fyfe Date: Mon, 19 Mar 2018 18:32:45 +0000 Subject: [PATCH] remove dependency on pip internals closes #1438 --- dev-requirements.txt | 1 + modoboa/core/commands/deploy.py | 17 +++++++---------- setup.py | 18 +++++++++--------- test-requirements.txt | 1 + 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 06d73f33c..e2dd90121 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,2 +1,3 @@ django-bower django-debug-toolbar +packaging diff --git a/modoboa/core/commands/deploy.py b/modoboa/core/commands/deploy.py index 791447d39..3dcfc0ccb 100644 --- a/modoboa/core/commands/deploy.py +++ b/modoboa/core/commands/deploy.py @@ -22,13 +22,7 @@ from django.utils.six.moves import input from modoboa.core.commands import Command from modoboa.lib.api_client import ModoAPIClient - -try: - import pip -except ImportError: - sys.stderr.write("Error: pip is required to install extensions.\n") - sys.exit(2) - +from modoboa.lib.sysutils import exec_cmd DBCONN_TPL = """ '{{ conn_name }}': { @@ -226,9 +220,12 @@ class DeployCommand(Command): extensions = [(extension, extension.replace("-", "_")) for extension in extensions] if not parsed_args.dont_install_extensions: - pip_args = ( - ["install"] + [extension[0] for extension in extensions]) - pip.main(pip_args) + cmd = ( + sys.executable + + " -m pip install " + + " ".join([extension[0] for extension in extensions]) + ) + exec_cmd(cmd, capture_output=False) extra_settings = self.find_extra_settings(extensions) extensions = [extension[1] for extension in extensions] diff --git a/setup.py b/setup.py index 43abc5c05..3a7a3737d 100644 --- a/setup.py +++ b/setup.py @@ -13,21 +13,21 @@ from __future__ import unicode_literals import io from os import path -from pip.req import parse_requirements +from packaging.requirements import Requirement from setuptools import find_packages, setup def get_requirements(requirements_file): - """Use pip to parse requirements file.""" + """Parse requirements file.""" requirements = [] if path.isfile(requirements_file): - for req in parse_requirements(requirements_file, session="hack"): - # check markers, such as - # - # rope_py3k ; python_version >= '3.0' - # - if req.match_markers(): - requirements.append(str(req.req)) + with io.open(requirements_file, encoding="utf-8") as fp: + for line in fp: + if line.startswith("#") or line.strip() == "": + continue + req = Requirement(line) + if req.marker is None or req.marker.evaluate(): + requirements.append('%s%s' % (req.name, req.specifier)) return requirements diff --git a/test-requirements.txt b/test-requirements.txt index 45bb850f1..03529194c 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -5,3 +5,4 @@ testfixtures==4.7.0 tox psycopg2-binary>=2.7.4 mysqlclient>=1.3.3 +packaging