为什么我们必须在 Google Colab 中附加 Rdkit 的路径

Why do we have to append path for Rdkit in Google Colab

!chmod +x Miniconda3-py37_4.8.3-Linux-x86_64.sh
!time bash ./Miniconda3-py37_4.8.3-Linux-x86_64.sh -b -f -p /usr/local
!time conda install -q -y -c conda-forge rdkit

import sys
sys.path.append('/usr/local/lib/python3.7/site-packages/')

在这段代码中,为什么我们必须在安装 rdkit 后附加路径?

sys.path.append('/usr/local/lib/python3.7/site-packages/')

您可以使用此代码。在 Colab 中安装 rdkit 会快很多。

!curl -L bit.ly/rdkit-colab | tar xz -C /

启动 Python 解释器后,将创建导入时用于搜索模块的所有目录列表。您可以从变量 sys.path 访问它。如果你在 colab 中 运行 这个,你可以看到 Python 在哪里搜索模块。

import sys
sys.path

>>> ['',
'/env/python',
 '/usr/lib/python36.zip',
 '/usr/lib/python3.6',
 '/usr/lib/python3.6/lib-dynload',
 '/usr/local/lib/python3.6/dist-packages',
 '/usr/lib/python3/dist-packages',
 '/usr/local/lib/python3.6/dist-packages/IPython/extensions',
 '/root/.ipython']

问题是 conda 会将软件包安装到 sys.path 中未包含的目录('/usr/local/lib/python{pyversion}/site-packages/'),因此 Python 不会能够找到由 conda 安装的包。这很简单,只需将路径附加到 sys.path 即可解决。现在 Python 知道在哪里寻找包,在本例中是 RDKit。请注意,我们可以通过查看 rdkit 的安装位置来验证是否属于这种情况:

sys.path.append('/usr/local/lib/python3.7/site-packages/')

import rdkit
rdkit.__file__

>>> /usr/local/lib/python3.7/site-packages/rdkit/__init__.py 

另请注意,sys.path 中的目录搜索顺序是在首次找到模块时停止。所以通过conda安装colab已经提供的包时,colab版本优先