저는 화학물질데이터를 다루는 일을 하고 있기 때문에 rdkit이라는 python libaray를 자주 사용합니다.
그런데 어제까지는 colab에서 잘 설치되던 rdkit이 오늘자로 갑자기 설치에 오류가 뜨는 것을 발견했습니다. 아마도 colab이 업데이트 되면서 vm의 설정이 조금 바뀐것 같습니다.
기존에 colab에서 rdkit을 설치하는 여러가지 방법이 있는데 모두 시도를 해보았지만 잘 되지 않았습니다.
기존내가 썼던 방법들
# rdkit 2020.03.3 버전 다운로드
!pip install kora -q
import kora.install.rdkit
# rdkit 2020.03.3 버전 다운로드
# !pip install kora -q
# import kora.install.rdkit
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='2020.03.3',
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__))
install()
이걸 사용했을때 이런 에러가 발생했습니다.
CalledProcessError: Command '['/root/miniconda/bin/conda', 'install', '--yes', '-c', 'rdkit', 'python==3.7.10', 'rdkit']' returned non-zero exit status 1.
새로 시도해본 방법
!wget -c https://repo.continuum.io/miniconda/Miniconda3-py37_4.8.3-Linux-x86_64.sh
!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/')
import rdkit은 되지만
from rdkit.Chem import AllChem는 되지 않고 아래와 같은 에러가 발생했습니다.
stack overflow에 검색을 하여 여러가지를 시도 해 보았지만. 그래도 여전히 되지 않았습니다.
...
그렇게 하루가 지나고..
25일인 오늘 다시 시도를 해 보았습니다.
# rdkit 2020.03.3 버전 다운로드
# !pip install kora -q
# import kora.install.rdkit
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='2020.03.3',
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__))
install()
위 방법으로 계속 시도를 하던 도중 원인을 발견한 것 같습니다.
colab의 현재 python version이 3.7.10인데....(Feb. 15, 2021 realse)
설치된 minconda를 이용하여 rdkit을 설치하려고 했을때 오류메세지를 보니 your python 이 3.8버전이라고 하는 것입니다...
3.7.10이지만 3.8로 인식을 하는것 같고.. 이 버전의 파이썬에서는 rdkit을 설치할 수 없는 것 같습니다.
kaggle notebook에서는 3.7.9버전의 python이였고.. 설치가 잘 되었습니다.
그렇담 현재 python 3.7.10 버전의 colab에서는 rdkit을 사용할 수 없는 것일까요?
두가지 방법이 있을 것 같습니다.
1. 3.7.10에 rdkit을 설치할 수 있는 방법을 알아본다. --> 이 방법을 좀더 강구해 보겠습니다.
2. colab의 python version을 downgrade한다. --> 이 방법은 구글링을 해봤지만 불가능한 것으로 생각되어집니다. --> 어쩌면 가능 할 수도 있겠습니다.
stackoverflow.com/questions/60775160/install-python-3-8-kernel-in-google-colaboratory
위에서 나온 방법에 3.7을 대입하면 되지 않을까 합니다. -->안되는것 같습니다...
일단 해결하기를 포기하고.. colab이나 rdkit이 update되기를 기다리는 수밖에 없겠네요.
....포기하려고하다가 마지막으로 시도해봤는데... 해결이 되었습니다!!!!!
!/root/miniconda/bin/conda install --yes -c rdkit python==3.7.9 rdkit
python version을 3.7.9로 바꿔주니까... 잘 되네요
결론을 말씀드리면 아래걸로 설치하면 된다는 말입니다!!!!!
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='2020.03.3',
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==3.7.9",
"rdkit" if rdkit_version is None else "rdkit=={}".format(rdkit_version)])
logger.info("done")
import rdkit
logger.info("rdkit-{} installation finished!".format(rdkit.__version__))
install()
'Linux > colab' 카테고리의 다른 글
[COLAB] google colab 이란? & 사용법 (0) | 2021.03.04 |
---|