Ошибки Python¶
Предварительно скомпилированные библиотеки¶
Хотя это и не является общепринятой практикой, аддоны Python могут распространяться с собственными предварительно скомпилированными библиотеками. В отличие от обычных скриптов Python, они не переносятся между разными платформами.
Возможно, библиотека несовместима с вашей установкой Blender (попытка загрузить библиотеку, созданную для другой версии Python, или загрузка 32-битной библиотеки в 64-битной системе).
Если аддон содержит файлы .pyd
или .so
, убедитесь, что дистрибутив совместим с вашей операционной системой.
Специфично для платформы¶
Windows¶
Смешанные библиотеки Python (DLLs)¶
Если Python выдаёт ошибки или у вас есть аддон, при включении которого происходит сбой и выдаётся ошибка, например: ...не является допустимым приложением Win32.
, – это может быть вызвано некоторой несогласованностью в библиотеках Python. Хотя Blender поставляется со своим собственным встроенным интерпретатором Python, дублирующиеся, несовместимые библиотеки могут вызывать проблемы.

Обратная трассировка Python.¶
Чтобы узнать, какая библиотека Python вызвала проблему, проверьте сообщение об ошибке.
Обычно об этом сообщается где-то в нижней строке обратной трассировки. Как видно из приведенной выше ошибки, проблема возникает при попытке импортировать _socket
. Это соответствует файлу с именем _socket.py
или _socket.pyd
.
Чтобы устранить эту проблему, можно вставить следующий скрипт в текстовый редактор и запустить его для проверки наличия повторяющихся библиотек в пути поиска. (Вывод будет показан в окне командной строки.)
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)