Environnement (prod) : paquetages (Win-x64)

3. Paquetage OASA3

OASA était une bibliothèque Python initialement utilisée dans BKChem un programme Linux de dessin moléculaire en 2D (un sketcher) puis dans d’autres outils comme OpenBabel. Son installation était dépendante de la bibliothèque Cairo et chaque fois que celle ci a été difficile à installer, en particulier sous Windows, les choses ont été compliquées. Finalement à partir de Python 2.7 c’est petit à petit la disparition de OASA. Puis après quelques versions mineures de Python3, elle n’est plus nécessaire pour OpenBabel/Pybel. D’ailleurs les outils fournis par le code OASA sont redondants de Pybel ou RDKit. Mais c’est encore une bibliothèque intéressante car elle permet de faire des choses avec les molécules car elle donne accès à la structure en arbre (graphes) des molécules, qui est utilisée pour les dépictions 2D.

Nous allons faire deux installations alternatives de OASA selon leur provenance, la première (distribution officielle) sera renommée OASA3 et l’autre renommée oasa4buildez.

Le paquetage oasa officiel ne s’installe que par pip, à ce stade de l’installation il n’y a plus de problèmes pour résoudre les dépendances (pycairo).

Paquetage commandes
oasa3 pip install oasa3

Notes d’installation (oasa3)
Le paquetage s’installe dans C:\Python3\envs\prod\Lib\site-packages\oasa, ce qui ne nous convient pas car il faudra assurer l’existence de oasa4buildez.
Il faut renommer oasa en oasa3 sans toucher aux modules car ils utilisent le . comme racine du paquetage et non une désignation explicite. On doit aussi modifier les fichiers RECORD et top_level.txt dans \site-packages\oasa3-x.dist-info en remplaçant oasa par oasa3.

fichier modifications
config.py Il faut modifier la ligne qui pointe vers inchi (inchi_binary_path): "c:\\Python3\\envs\\prod\\library\\bin\\inchi-1.exe"
molfile.py Il faut modifier (ajouter str) en ligne 313: m.read_file(StringIO("".join(str(chunk))))
structure_database.py Ne pas installer pysqlite3, à la place de pysqlite2, simplement modifier : from sqlite3 import dbapi2 as sqlite
oasa_tools.py N’existe pas dans OASA3.
pybel_bridge.py Remplacer import pybel, openbabel par :
import openbabel
from openbabel import pybel

Il ne faut pas faire les tests dans le paquetage OASA3, les modules ne fonctionnement pas. Mais les fonctions de OASA3 peuvent être appelées par un code externe.

OASA3 peut être installé en parallèle avec oasa4buildez (préféré) mais les deux ne peuvent pas coexister dans le même code. Pour utiliser OASA3 il faudra modifier les imports, par exemple :.

fichier Importer OASA3
test_gen_oasa3.py import oasa3 as oasa
from oasa3 import smiles
from oasa3 import molfile
test_img_oasa3.py import oasa3 as oasa
from oasa3.cairo_out import cairo_out
from oasa3.molfile import file_to_mol
from oasa3.coords_generator import coords_generator(chunk))))

Dans ce contexte, les tests sont fonctionnels.

Tests (oasa3)

A partir de la version (v: 1.31) de tests-buildez les tests sont normalisés entre oasa3 et oasa4buildez. Les programmes sont dans C:\Dev\tests-buildez\test_oasa3, les données dans \tests et les résultats dans \tests-gen et \tests-img pour les programmes test_img_oasa3.py et test_gen_oasa3.py. La plupart des fonctions marchent à l’exception de smiles_from_db(), smiles_compression(), test_CIP(), test_sdf_processing(), show_dump().

A priori cette installation suffit, même s’il y a encore beaucoup d’erreurs à corriger. Dans ce cas, il faut installer la version buildez de OASA qui est plus nettoyée. Dans buildez on n’utilise plus OASA que dans buildez.chem.pybel_interface/pybel_image.py pour générer des images de molécules en utilisant pycairo.

On peut donc afficher des molécules au formats SMILES, MDL mol, Inchi sous la forme d’images PNG, SVG, PDF avec un fond (ou en transparence), en modifiant la taille des traits, avec une rotation … Quelques exemples de test pour la molécule CCOC(=O)C1=C(C)N(C2=C1C=C(OC1=NC=NC(C3CNCCN3)=C1[N+]([O-])=O)C=C2)C1=CC=CC=C1O (SMILES) :

Le code pour la première image :

Les composantes RGB de la couleur de fond sont fixées par c.background_color, le gras avec la valeur de line_width, la taille des caractères par  c.font_size,  l’expansion par mol.normalize_bond_length … les arguments par défaut sont définis dans le module cairo_out.py de OASA3.

Liens et lectures
Retour en haut