Errors de Python¶
Biblioteques precompilades¶
Tot i que no és una pràctica habitual, els complements de Python es poden distribuir amb les seves pròpies biblioteques precompilades. A diferència dels protocols normals de Python, aquests no són portables entre diferents plataformes.
És possible que la biblioteca sigui incompatible amb la vostra instal·lació del Blender (que intenti carregar una biblioteca confegida per a una versió diferent de Python que carregui una biblioteca de 32 bits en un sistema de 64 bits).
Si el complement conté documents .pyd o bé .so, comproveu que la distribució sigui compatible amb el vostre sistema operatiu.
Específiques de plataforma¶
Windows¶
Biblioteques diverses de Python (DLLs)¶
Si Python genera erros o teniu un complement que simplement falla en habilitar-lo i dona un error – p. ex ... is not a valid Win32 application. –, això es pot deure a alguna incoherència de les biblioteques de Python. Per bé que Blender ve amb el seu propi intèrpret de Python integrat, les biblioteques duplicades i incompatibles poden causar problemes.
Una retrospecció de Python.¶
Per a esbrinar quina Biblioteca de Python ha causat el Problema, comproveu el missatge d’error.
Aquestes coses normalment s’informen en algun lloc de la línia final de la retrospectiva. Amb l’error anterior, veureu que el problema surt quan s’intenta importar _socket. Això correspon a un document anomenat _socket.py o bé _socket.pyd.
Per a tractar aquesta incidència, es pot enganxar el protocol següent a l’editor de text i executar-lo per a comprovar si hi ha biblioteques duplicades en la ruta de cerca. (L’egressió es mostrarà a Finestra de línia d’ordres.)
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)