diff --git a/modoboa_installer/python.py b/modoboa_installer/python.py index 4f319cc..948c62f 100644 --- a/modoboa_installer/python.py +++ b/modoboa_installer/python.py @@ -82,6 +82,16 @@ def install_package_from_repository(name, url, vcs="git", venv=None, **kwargs): utils.exec_cmd(cmd, **kwargs) +def install_package_from_remote_requirements(url, venv=None, **kwargs): + """Install a Python package from a file.""" + cmd = "{} install {} {}".format( + get_pip_path(venv), + "-r", + url + ) + utils.exec_cmd(cmd, **kwargs) + + def setup_virtualenv(path, sudo_user=None, python_version=2): """Install a virtualenv if needed.""" if os.path.exists(path): diff --git a/modoboa_installer/scripts/modoboa.py b/modoboa_installer/scripts/modoboa.py index 55d3ad1..807df70 100644 --- a/modoboa_installer/scripts/modoboa.py +++ b/modoboa_installer/scripts/modoboa.py @@ -96,15 +96,6 @@ class Modoboa(base.Installer): packages.append("{}{}".format(extension, req_version)) else: packages.append(extension) - # Temp fix for django-braces - python.install_package( - "django-braces", self.venv_path, upgrade=self.upgrade, - sudo_user=self.user - ) - if self.dbengine == "postgres": - packages.append("psycopg2-binary\<2.9") - else: - packages.append("mysqlclient") if sys.version_info.major == 2 and sys.version_info.micro < 9: # Add extra packages to fix the SNI issue packages += ["pyOpenSSL"] @@ -114,11 +105,6 @@ class Modoboa(base.Installer): sudo_user=self.user, beta=self.config.getboolean("modoboa", "install_beta") ) - if self.devmode: - # FIXME: use dev-requirements instead - python.install_packages( - ["django-bower", "django-debug-toolbar"], self.venv_path, - upgrade=self.upgrade, sudo_user=self.user) def _deploy_instance(self): """Deploy Modoboa.""" @@ -210,6 +196,24 @@ class Modoboa(base.Installer): def setup_user(self): super().setup_user() self._setup_venv() + # Install version specific modules to the venv + modoboa_version = ".".join(str(i) for i in python.get_package_version( + "modoboa", self.venv_path, sudo_user=self.user + )) + # Database: + db_file = "postgresql" + if self.dbengine != "postgres": + db_file = "mysql" + db_file += "-requirements.txt" + + python.install_package_from_remote_requirements( + f"https://raw.githubusercontent.com/modoboa/modoboa/{modoboa_version}/{db_file}", + venv=self.venv_path) + # Dev mode: + if self.devmode: + python.install_package_from_remote_requirements( + f"https://raw.githubusercontent.com/modoboa/modoboa/{modoboa_version}/dev-requirements.txt", + venv=self.venv_path) def get_config_files(self): """Return appropriate path."""