diff --git a/modoboa_installer/python.py b/modoboa_installer/python.py index 3c07f19..fc89cf6 100644 --- a/modoboa_installer/python.py +++ b/modoboa_installer/python.py @@ -22,10 +22,14 @@ def get_pip_path(venv): return binpath -def install_package(name, venv=None, upgrade=False, **kwargs): +def install_package(name, venv=None, upgrade=False, binary=True, **kwargs): """Install a Python package using pip.""" - cmd = "{} install {}{}".format( - get_pip_path(venv), " -U " if upgrade else "", name) + cmd = "{} install{}{} {}".format( + get_pip_path(venv), + " -U" if upgrade else "", + " --no-binary :all:" if not binary else "", + name + ) utils.exec_cmd(cmd, **kwargs) @@ -67,4 +71,4 @@ def setup_virtualenv(path, sudo_user=None, python_version=2): utils.exec_cmd("virtualenv {}".format(path)) else: utils.exec_cmd("{} -m venv {}".format(python_binary, path)) - install_package("pip", venv=path, upgrade=True) + install_packages(["pip", "setuptools"], venv=path, upgrade=True) diff --git a/modoboa_installer/scripts/modoboa.py b/modoboa_installer/scripts/modoboa.py index 9ac8645..a00a2c7 100644 --- a/modoboa_installer/scripts/modoboa.py +++ b/modoboa_installer/scripts/modoboa.py @@ -69,10 +69,11 @@ class Modoboa(base.Installer): packages = ["rrdtool"] version = self.config.get("modoboa", "version") if version == "latest": - packages += ["modoboa"] + self.extensions + modoboa_package = "modoboa" + packages += self.extensions else: matrix = compatibility_matrix.COMPATIBILITY_MATRIX[version] - packages.append("modoboa=={}".format(version)) + modoboa_package = "modoboa=={}".format(version) for extension in list(self.extensions): if not self.is_extension_ok_for_version(extension, version): self.extensions.remove(extension) @@ -84,6 +85,9 @@ class Modoboa(base.Installer): packages.append("{}{}".format(extension, req_version)) else: packages.append(extension) + # Temp fix for https://github.com/modoboa/modoboa-installer/issues/197 + python.install_package( + modoboa_package, self.venv_path, binary=False, sudo_user=self.user) if self.dbengine == "postgres": packages.append("psycopg2-binary") else: