Blender (jusqu'à 2.49)
Python 
Trucs et Astuces(2)
Description: faire cohabiter deux versions de python.
 
    Début   Index
précédentScript Python, truc 1
Script Python, EnvMap 1/3 Suivant
Attention, Voir aussi :
Utilisation du scripting : variable d'environnement
Utilisation du scripting : modifications importantes de la version 2.34
Utilisation du scripting : python PATH 
Utilisation du scripting : corriger le path

Avertissement:

Les relations entre python et Blender sont assez tumultueuses. En 3 années d'existence (depuis la lointaine époque où  ce texte a été écrit, 3 autres années se sont écoulées)  l'API python a connu bien des changements et accompagne  bien des versions du logiciel sur lesquels des auteurs de scripts très enthousiastes ont produits des oeuvres originales de qualités qui augmentent considérablement les capacités de modélisation et d'animation. Aussi faut-il beaucoup de prudence et d'attention pour  s'y retrouver car si la tentation est grande devant ces travaux plus intéressants les uns que les autres, on risque d'être déçu par les résultats et, surtout, par la de longues liste de messages d'erreurs 
Si la chronologie est complexe, la relation avec une installation complète du langage, sans être absolument indispensable, peut être utile mais ne facilite pas beaucoup les choses car la synchronistion n'est pas toujours au rendez-vous . Cette page se propose donc de donner des informations sur la manière de faire coexister deux versions de python sur le même disque . Cette fantaisie étant liées à l'obligation de conserver plusieurs versions différentes de Blender lui-même .

Un tableau permet de visualiser  les différentes possibilités:

Blender 1.80 et 2.0x  Python 1.52, Blender API  Daniel Dunbar
Blender  2.1x Python 2.0, Blender API écrite par Jan Walter
Blender  2.14 et suivantes (voir en bas de page) Python 2.0, Blender API écrite par Jan Walter cohabitant avec celle de Danel Dunbar.
Blender 2.25 (alias Publisher, version payante du logiciel qui n'a pas connu une grande carrière car la société a été mise en faillite le14 mars 2002) Python2.x, mélange du travail de Daniel Dunbar et de celui de Jan Walter avec une mise en forme globale plus efficace et structurée. Auteur: Martin Strubel (alias strubbi)
Blender 2.28 Nouvelle API python proposée par Michel Selten . 
Abandon définitif de la compatibilité avec l'API 2.1 
 Tous les scripts qui ont été écrits pour la version  2.1x sont définitivement inutilisables avec les versions 2.28 et suivantes, à moins d'être lourdement adaptés, evidemment .
Comment procéder?
Une des questions que l'on se pose est lié à la version de python qu'il faut utiliser: faut-il avoir la 1.52 ou la 2.0?
Par ailleur, faut-il simplement installer une version complète du python? Ne peut -on se contenter du fichier DLL qui accompagne blender?
A priori ces DLLs (dans les versiosn plus récentes, il y a aussi un fichier python2xx.zip qui contient d'autres modules pour compléter l'échantillonages déjà importants sous Window) sont suffisantes pour la plupart des scripts. Mais il se peut que des modules externes doivent être chargés. Dans ces cas là les bibliothèques pythons sont (ou, maintenant, puisqu'il  existe, comm e on vient de le signaler, un fichier spécial pour gérer les modules nécessaires aux scripts livrés en "bundle", peuvent être ) nécessaires.
sys.path et PYTHONPATH
Python se sert de deux outils pour repérer ces bibliothèques. En premier lieu du module 'embarqué' :  sys (un module embarqué se trouve dans la DLL qui accompagne blender), en second lien du chemin de recherche qui est contenu dans la liste path associée à ce module. Il est possible de tester le contenu de cette liste avec le script ci-dessous:
import sys
print sys.path
f=open('syspath.txt','w')
for l in sys.path:
 f.write(l+'\n')
f.close()
On obtient un série de répertoires qui correspond aux répertoires standards de toute installation python qui se respecte que ce soit la version 1.52 ou la 2.0.
Contenu du fichier syspath.txt

.\DLLs
.\lib
.\lib\plat-win
.\lib\lib-tk
E:\ZI^P\3DGRX\BLENDER\BINARIES

Par contre, pour savoir où se trouve ces répertoires il est impératif de fournir le lieu dans lequel VOUS les avez rangé. Lors de l'installation vous avez certainement ajouter la variable d'environnement suivante dans votre fichier autoexec.bat.
  ...
rem contenu de la variable d'environnement déclarée dans l'autoexec.bat
SET PYTHONPATH=F:\PROGRAMSFILES\PYTHON;F:\PROGRAMSFILES\PYTHON\LIB;F:\PROGRAMSFILES\PYTHON\LIB\PLAT-WIN;F:\PROGRAMSFILES\PYTHON\DLLS
...

Python remplace le '.' de chaque chaine de caractère de la liste path par le contenu de la variable PYTHONPATH. La manoeuvre qui permettra d'utiliser les fichiers d'une version à la place d'une autre consiste à griller la politesse à python en remplaçant ce point par l'adresse que l'on souhaite (si possible avant lui et définitivement donc en supprimant les points). L'opération peut  se résumer techniquement  à ajouter la ligne définissant le nouveau sys.path avant toute autre opération:

#debut du script
import sys
adresse152='F:\PROGRAMSFILES\PYTHON152'
Lpath=sys.path #on ne sait jamais, pour le cas où...
sys.path=[adresse152+'\DLLs',
                  adresse152+'\lib',
                  adresse152+'\lib\plat-win',
                  'adresse152+\lib\lib-tk',
                  'E:\ZI^P\3DGRX\BLENDER\BINARIES']
....
#suite du script
au début de chaque script. Tout simplement...
Enfin presque car on suppose que les répertoires en question ont été installés en premiers, imaginons un instant que ce soit la version 1.52, puis copiés à une adresse différente pour être préservés. On suppose aussi que cette version a été supprimée et remplacée, par exemple par la 2.0, il vaut mieux éviter d'installer la version 2.1 pour l'instant.

Enfin dernier détail important: ne pas oublier d'indiquer le répertoire courant, c'est à dire celui où se trouve le DLL python.

Blender  2.14 et suivantes:
A partir de la version 2.14 de blender les API python se mélangent et sont toutes les deux compatible python 2.0. Il n'est plus nécessaire de jongler avec le système d'exploitation pour faire fonctionner les scripts. Cependant une modification est nécessaire pour les scripts écrits pour blender 2.10/11 et 12. Au début du script il faut modifier l'importation du module Blender de la manière suibante:
import Blender210 as Blender
...
Des combinaisons plus complexes des deux modules peuvent fonctionner aussi. Les déclarations suivantes permettront malgré tout un bon fonctionnement:
import Blender as BlenderOld
import Blender210 as Blender
...
précédentScript Python, truc 1
 Script Python, EnvMap 1/3 Suivant
Vers le Haut de page

Les questions concernant cette page  peuvent être posées sur  :
 news://news.zoo-logique.org/3D.Blender

Livre en français
Blender : apprenez, pratiquez, Créez, livre, Ed. Campus Press, coll. Starter Kit
Blender Starter Kit

Forum
FAQ
Lexique
Didacticiels
Compilations
Blender2KT
Débuter
Modelage
Blender python
Materiaux
Lumière
Animation
API python (eng)
Archives nzn
Statistiques
Doc flash Sculptris
Galerie Sculptris

mon site de démos sur youtube