summaryrefslogtreecommitdiff
path: root/Content/posts/2020-07-01-Install-rdkit-colab.md
diff options
context:
space:
mode:
Diffstat (limited to 'Content/posts/2020-07-01-Install-rdkit-colab.md')
-rw-r--r--Content/posts/2020-07-01-Install-rdkit-colab.md100
1 files changed, 100 insertions, 0 deletions
diff --git a/Content/posts/2020-07-01-Install-rdkit-colab.md b/Content/posts/2020-07-01-Install-rdkit-colab.md
new file mode 100644
index 0000000..c456aa8
--- /dev/null
+++ b/Content/posts/2020-07-01-Install-rdkit-colab.md
@@ -0,0 +1,100 @@
+---
+date: 2020-07-01 14:23
+description: Install RDKit on Google Colab with one code snippet.
+tags: Tutorial, Code-Snippet, Colab
+---
+
+# Installing RDKit on Google Colab
+
+RDKit is one of the most integral part of any Cheminfomatic specialist's toolkit but it is notoriously difficult to install unless you already have `conda` installed. I originally found this in a GitHub Gist but I have not been able to find that gist again :/
+
+Just copy and paste this in a Colab cell and it will install it 👍
+
+```python
+import sys
+import os
+import requests
+import subprocess
+import shutil
+from logging import getLogger, StreamHandler, INFO
+
+
+logger = getLogger(__name__)
+logger.addHandler(StreamHandler())
+logger.setLevel(INFO)
+
+
+def install(
+ chunk_size=4096,
+ file_name="Miniconda3-latest-Linux-x86_64.sh",
+ url_base="https://repo.continuum.io/miniconda/",
+ conda_path=os.path.expanduser(os.path.join("~", "miniconda")),
+ rdkit_version=None,
+ add_python_path=True,
+ force=False):
+ """install rdkit from miniconda
+ ```
+ import rdkit_installer
+ rdkit_installer.install()
+ ```
+ """
+
+ python_path = os.path.join(
+ conda_path,
+ "lib",
+ "python{0}.{1}".format(*sys.version_info),
+ "site-packages",
+ )
+
+ if add_python_path and python_path not in sys.path:
+ logger.info("add {} to PYTHONPATH".format(python_path))
+ sys.path.append(python_path)
+
+ if os.path.isdir(os.path.join(python_path, "rdkit")):
+ logger.info("rdkit is already installed")
+ if not force:
+ return
+
+ logger.info("force re-install")
+
+ url = url_base + file_name
+ python_version = "{0}.{1}.{2}".format(*sys.version_info)
+
+ logger.info("python version: {}".format(python_version))
+
+ if os.path.isdir(conda_path):
+ logger.warning("remove current miniconda")
+ shutil.rmtree(conda_path)
+ elif os.path.isfile(conda_path):
+ logger.warning("remove {}".format(conda_path))
+ os.remove(conda_path)
+
+ logger.info('fetching installer from {}'.format(url))
+ res = requests.get(url, stream=True)
+ res.raise_for_status()
+ with open(file_name, 'wb') as f:
+ for chunk in res.iter_content(chunk_size):
+ f.write(chunk)
+ logger.info('done')
+
+ logger.info('installing miniconda to {}'.format(conda_path))
+ subprocess.check_call(["bash", file_name, "-b", "-p", conda_path])
+ logger.info('done')
+
+ logger.info("installing rdkit")
+ subprocess.check_call([
+ os.path.join(conda_path, "bin", "conda"),
+ "install",
+ "--yes",
+ "-c", "rdkit",
+ "python=={}".format(python_version),
+ "rdkit" if rdkit_version is None else "rdkit=={}".format(rdkit_version)])
+ logger.info("done")
+
+ import rdkit
+ logger.info("rdkit-{} installation finished!".format(rdkit.__version__))
+
+
+if __name__ == "__main__":
+ install()
+```