rdkitでSMILESから構造式を返すdiscord botを作りたいという願望(1)
0. は?願望?
確かに動いてるんですよ、だから書いてるんです。しかしながら、どうも無理やり感が半端なく、問題をたくさんはらんでいるので、ひとまずこんな名前になってるわけです。後の期待を込めて(1)とか書いてますが、後続があるかさえわかりません。ひとまず動きました。そういうことです。
要するに、
あんまり再現性とか期待しないでね!
ということです。
いや、この記事意味あるんか...
1. で、何がしたいの?
タイトルのままです。discordでSMILESを投げたらpngで構造式返してくれるアレがやりたいわけです。私は手書きで綺麗なベンゼン環が書けないので、CPUにやらせてサボりたいわけです。でも同時に、いちいちノーパソ開いて無料なのがとてもありがたい某ソフトを起動させたりするのもまためんどくさいわけです。どうにかして「スマートフォンの画面にsmiles打ち込むだけで...あら不思議!」をやりたいわけです!!!
ここで一つ疑問がわいてきます。
「そういうbotとかサービスって、既にあるよね...?」
確かにあります。ありますとも。でも私には自分で作らなばならないやんごとなき理由があったのです。それは、
どうしても自分でやってみたかった
ということです。これなら仕方ないですね。
以上、モチベでした。
2 じゃあ、どうやるの?
そういえば、rdkitっていう、便利なやつがありましたね。あれ、使いましょう。discord botのdiscord側の設定に関しては、ネットで調べればたくさん出てくると思うので、割愛します。まずは適当にdiscord.pyを入れておきます。Windowsならば、以下を叩きます(他のOSの場合は、リンクに飛んで確認してください)。
py -3 -m pip install -U discord.py
よし、できました。次はrdkitを使いたいわけですが、悲報があるそうです。
RDKIT IS NOT AVAILABLE ON PYPI!!!
これは、辛いですね。で、見てみると、Anacondaを使えと書いてあります。では有難く使わせてもらいましょう。conda入ってない人はここから適当に入れて下さい。おそらくスムーズに入ると思います。
次に、下のコマンドを打てって言っているので、素直に打ちます。
conda create -c rdkit -n my-rdkit-env rdkit
入りました。はい。
これで実行時に以下のコマンドを叩けば、rdkitがimportできるはずです。
conda activate my-rdkit-env
または以下でもいいと思います。
call activate.batのパス
call activate my-rdkit-env
やったね!下準備完了です。さぁコードを書いていきましょう。discord.pyの公式ページ等を参考にしました。
#必要なライブラリ
import discord
from rdkit import Chem
from rdkit.Chem import Draw
client = discord.Client()
@client.event
async def on_ready():
print('Successfully Connected')
@client.event
async def on_message(message):
if message.author == client.user:
return
if botとして機能する何らかの条件(あるチャンネルに発言があった、など):
str=message.content
mol=Chem.MolFromSmiles(str)
if mol is None:
await message.channel.send('Oops! There is something wrong with SMILES!')
else:
Draw.MolToFile(mol, 'mol.png')
await message.channel.send(file=discord.File('mol.png'))
client.run('ここにAccessTokenを入れます。Secretじゃないので注意!')
ただこれ、少しめんどくささが残ります。というのも、いちいち仮想環境をactivateして実行までしなきゃいけないのです。これ嫌ですね。なぜならそのためにノーパソを開かなきゃいけないからです!(だったら例のソフトでいいやん...)
そこで、下のようなbatを書いておきます。callにしないとactivateしたときにそのまま次のコマンドを実行してくれないっぽいです。
call activate.batのパス
call activate my-rdkit-env
cd ChemConverter.pyのあるディレクトリのパス
python ChemConverter.py
これでChemConverter.batを動かすだけで一発でbotが起動するようになりました。最後に、このbatをタイムスケジューラでスタートアップ時に実行するようにしておけば、勝手にバックグラウンドで立ち上がってくれます。便利ですね。よかった、よかった。
3. ん?問題なんてあった?
そんなものはなかった、と言いたいところですが、お気づきの通り、山ほどあります。
まず、
1. でかい化合物だと構造式がつぶれます。
見るのが早いです。これです。
つぎに、
2.ノーパソを起動していないと動きません。
だって、ノーパソ上で動いてるんだもん。そりゃそうだ。
いや、一応打開しようとはしましたよ?herokuとかPythonAnywhereとかで動かせないかな~と思っていろいろやってみました。というか、どちらにせよ、condaがないとrdkitが入れにくすぎるんじゃー!!!いやー、世の中でこういうbotつくってるひとはすごいなー(遠い目)
4. え、これで終わり?
はい、終わりです。
ということで、こんな感じにやれれば、ダサいうえにPCを私たちが起きている時間ずっと稼働させておくための電気代という犠牲を伴いますが、何とか動かせました。
進展があったら書こうかと思います。
次があったときは、またよろしくお願いします。
ここまで読んでいただいた方、ありがとうございました。
何かのお役に立てれば光栄です。
環境とか
Windows 10
Python 3.6.2
Author And Source
この問題について(rdkitでSMILESから構造式を返すdiscord botを作りたいという願望(1)), 我々は、より多くの情報をここで見つけました https://qiita.com/pocco/items/b6c75155f7633f788f03著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .