Fel i Python¶
Förkompilerade bibliotek¶
Även om det inte är vanligt förekommande kan Python-tillägg distribueras med sina egna förkompilerade bibliotek. Till skillnad från vanliga Python-skript är dessa inte portabla mellan olika plattformar.
Det är möjligt att biblioteket inte är kompatibelt med din Blender-installation (försök att ladda ett bibliotek som är byggt för en annan version av Python, eller ladda ett 32-bitars bibliotek på ett 64-bitars system).
Om tillägget innehåller filerna .pyd eller .so bör du kontrollera att distributionen är kompatibel med ditt operativsystem.
Plattformsspecifika¶
Windows¶
Blandade Python-bibliotek (DLL:er)¶
Om Python ger upphov till fel eller om du har ett tillägg som bara misslyckas när det aktiveras med ett fel – t.ex.: … is not a valid Win32 application. – kan detta orsakas av någon inkonsekvens i Python-biblioteken. Även om Blender levereras med sin egen Python-tolk, kan dubbla, inkompatibla bibliotek orsaka problem.

En Python-spårning.¶
Kontrollera felmeddelandet för att ta reda på vilket Python-bibliotek som orsakade problemet.
Detta rapporteras normalt någonstans runt den nedersta raden i spårningen. Med felet ovan ser du att problemet orsakas när du försöker importera _socket. Detta motsvarar antingen en fil med namnet _socket.py eller _socket.pyd.
För att hjälpa till att felsöka det här problemet kan följande skript klistras in i textredigeraren och köras för att kontrollera om det finns dubbla bibliotek i sökvägen. (Utdata visas i Command Line Window.)
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)