Erreurs Python¶
Bibliothèques précompilées¶
Bien que ce ne soit pas de pratique courante, les add-ons Python peuvent être distribués avec leurs bibliothèques précompilées. Contrairement aux scripts Python habituels, ceux-ci ne sont pas portables entre différents plateformes.
Il est possible que la bibliothèque soit incompatible avec votre installation de Blender (tentative de chargement d’une bibliothèque construite pour une version différente de Python, ou chargement d’une bibliothèque 32-bits sur un système 64-bits).
Si l’add-on contient des fichiers .pyd
ou .so
, vérifiez que la distribution est compatible avec votre système d’exploitation.
Spécifique à la plateforme¶
Windows¶
Bibliothèques Python mélangées (DLL)¶
Si Python lève des erreurs ou si vous avez un add-on qui échoue après activation avec une erreur, par ex. ... is not a valid Win32 application.
.
Cela peut être dû à une certaine incohérence dans les bibliothèques Python. Bien que Blender soit livré avec son propre interpréteur Python, les bibliothèques doubles et incompatibles peuvent poser des problèmes.
Pour découvrir quelle bibliothèque de Python a causé le problème, consultez le message d’erreur.
Cette situation est normalement signalée quelque part autour de la ligne du bas du retraçage. Avec l’erreur ci-dessus vous voyez que le problème est causé par la tentative d’import de _socket
. Ceci correspond à un fichier nommé _socket.py
ou _socket.pyd
.
Pour aider à la résolution de ce problème, le script suivant peut être collé dans l’éditeur de Texte et lancé pour rechercher les bibliothèques dupliquées dans votre chemin de recherche (la sortie va s’afficher dans la fenêtre de la ligne de commande).
import os
import sys
# Change this based on the library you wish to test
test_lib = "_socket.pyd"
def GetSystemDirectory():
from ctypes import windll, create_string_buffer, sizeof
GetSystemDirectory = windll.kernel32.GetSystemDirectoryA
buffer = create_string_buffer(260)
GetSystemDirectory(buffer, sizeof(buffer))
return os.fsdecode(buffer.value)
def library_search_paths():
return (
# Windows search paths
os.path.dirname(sys.argv[0]),
os.getcwd(),
GetSystemDirectory(),
os.environ["WINDIR"], # GetWindowsDirectory
*os.environ["PATH"].split(";"),
# regular Python search paths
*sys.path,
)
def check_library_duplicate(libname):
paths = [p for p in library_search_paths()
if os.path.exists(os.path.join(p, libname))]
print("Library %r found in %d locations:" % (libname, len(paths)))
for p in paths:
print("- %r" % p)
check_library_duplicate(test_lib)