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.

C’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..

../_images/troubleshooting_python_traceback.png

Un retraçage de Python.

Cela peut être causé par quelque incohérence dans les bibliothèques de Python. Bien que Blender fournisse son propre interpréteur Python, les bibliothèques dupliquées incompatibles peuvent créer des problèmes.

Pour découvrir quelle bibliothèque de Python a causé le problème, consultez le message d’erreur.

Ceci est normalement rapporté quelque part au niveau 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)