{"id":5943,"date":"2025-03-28T14:45:35","date_gmt":"2025-03-28T13:45:35","guid":{"rendered":"https:\/\/spgoo.org\/?page_id=5943"},"modified":"2025-12-11T12:05:06","modified_gmt":"2025-12-11T11:05:06","slug":"utilisation-de-pymol-dans-les-notebooks-jupyter","status":"publish","type":"page","link":"https:\/\/spgoo.org\/?page_id=5943","title":{"rendered":"Utilisation de pymol dans les notebooks jupyter"},"content":{"rendered":"\n<p>pymol est un outil de visualisation graphique d\u00e9di\u00e9 aux structures mol\u00e9culaires. Les jupyter notebooks  sont des outils formidables pour organiser une succession d&#8217;\u00e9tapes de calculs. Pouvoir utiliser ces deux outils ensemble peut \u00eatre tr\u00e8s avantageux.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Une instance de pymol par notebook<\/h2>\n\n\n\n<p>En d\u00e9finissant la classe suivante, il devient possible de lancer une instance de pymol pour chacun des notebooks utilis\u00e9s. Attention , d\u00e8s que le kernel est arr\u00eat\u00e9, la session de pymol associ\u00e9e dispara\u00eet.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>class pymolPy3:\n    def __init__(self, mode = 1):\n        # Enable gui...\n        cmd = 'pymol -p'\n\n        # Turn off gui...\n        if mode != 1: cmd = 'pymol -pc'\n\n        # Create a subprocess...\n        self.pymolpy3 = Popen(cmd, shell=True, stdin=PIPE, stdout=DEVNULL)\n\n    def __del__(self):\n        # Turn off stdin...\n        self.pymolpy3.stdin.close()\n\n        # Wait until program is over...\n        self.pymolpy3.wait()\n\n        # Terminate the subprcess...\n        self.pymolpy3.terminate()\n\n    def do(self, s):\n        # Keep reading the new pymol command as a byte string...\n        res = self.pymolpy3.stdin.write( bytes( (s + '\\n').encode() ) )\n\n        # Flush it asap...\n        res = self.pymolpy3.stdin.flush()\n\n    def get_Mp(\n        self\n        ):\n        logger.debug(\"get_p_from_pymol\")\n        # --------------------------------------------------------------------------\n        self.do(f\"\"\"\nimport sys\nimport numpy as np\nsys.path.insert(0, f\"\/home\/krezel@ICOA-03.LOCAL\/Documents\/Programmes\/Gitlab\")\nfrom tools_SBC.basic import (get_path, ya, yapa, load_var, dump_var, bash)\nMp = cmd.get_coords(\"(sele)\",1)\ndump_var(Mp, \"Mp\")\n        \"\"\")\n        sleep(0.5)\n        return load_var(\"Mp\")\n\n\n\n<\/code><\/pre>\n\n\n\n<p>En mettant ce code dans un fichier pymol.py, il devient possible de faire la chose suivante. On suppose que le r\u00e9pertoire courant poss\u00e8de un fichier protein.pdb d&#8217;une prot\u00e9ine.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"616\" height=\"315\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-28-16-07-27.png\" alt=\"\" class=\"wp-image-5946\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-28-16-07-27.png 616w, https:\/\/spgoo.org\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-28-16-07-27-300x153.png 300w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<pre class=\"wp-block-code has-small-font-size\"><code>from pymol import pymolPy3\npm = pymolPy3()\npath = get_path()\npm.do(f\"\"\"\ncd {path}\ndelete all\nbg_color white\nload protein.pdb\nutil.cbag protein\nshow surface, protein\nhide cartoon\nset transparency, 0.5, protein\nzoom\n\"\"\")<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size\">Les fonctions de ce type sont dans pymol.py<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Une instance de pymol commune \u00e0 tous les notebooks<\/h2>\n\n\n\n<p>Dans le cas o\u00f9 l&#8217;on veut travailler avec une seule instance de pymol qui soit commune \u00e0 tous les notebooks, il faut lancer pymol \u00e0 partir d&#8217;une console \u00e0 l&#8217;aide de pymol -R<\/p>\n\n\n\n<p>Ensuite il est possible de d\u00e9velopper des fonctions comme la suivante qui permet d&#8217;afficher des mol\u00e9cules rdkit.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"425\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-28-18-34-26.png\" alt=\"\" class=\"wp-image-5949\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-28-18-34-26.png 900w, https:\/\/spgoo.org\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-28-18-34-26-300x142.png 300w, https:\/\/spgoo.org\/wp-content\/uploads\/2025\/03\/Capture-decran-du-2025-03-28-18-34-26-768x363.png 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code has-small-font-size\"><code>def pymol_show_Lmol(\n        Lmol,\n        name=None,\n        color=\"green\",\n        style=\"stick\",\n        cartoon=-1,\n        surface=False,\n        ref=None,\n        ):\n    \"\"\"\n    \"\"\"\n    logger.debug(\"pymol_show_Lmol\")\n    # --------------------------------------------------------------------------\n    cmdx = get_cmd()\n    path = get_path()\n    cmdx.do(f\"cd {path}\")\n    cmdx.do(\"set all_states, off\")\n    if name is None:\n        name = get_s_from_object(Lmol)\n    fname = f\"{name}.sdf\"\n    create_sdf_from_Lmol(Lmol, fname, keep_prop=False)\n    pymol_load(\n                fname=fname,\n                name=name,\n                style=style,\n                color=color,\n                cartoon=cartoon,\n                surface=surface,\n                ref=ref,  \n            )<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size\">Les fonctions de ce type sont dans pymol_SCARTEK.py<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Acc\u00e9der \u00e0 pymol depuis un jupyter lab lanc\u00e9 dans un docker<\/h2>\n\n\n\n<p>Nous sommes dans ls situation o\u00f9 jupyter lab fonctionne dans un docker. Pour que pymol puisse \u00eatre vu , il faut taper la commande suivante:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export PYMOL_RPCHOST=0.0.0.0<\/code><\/pre>\n\n\n\n<p>puis lancer pymol en mode RPC:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pymol-oss.pymol -R<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>pymol est un outil de visualisation graphique d\u00e9di\u00e9 aux structures mol\u00e9culaires. Les jupyter notebooks sont des outils formidables pour organiser une succession d&#8217;\u00e9tapes de calculs. Pouvoir utiliser ces deux outils ensemble peut \u00eatre tr\u00e8s avantageux. Une instance de pymol par notebook En d\u00e9finissant la classe suivante, il devient possible de lancer une instance de pymol [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5943","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/5943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5943"}],"version-history":[{"count":5,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/5943\/revisions"}],"predecessor-version":[{"id":11159,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/5943\/revisions\/11159"}],"wp:attachment":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}