Ошибки Python¶
Предварительно скомпилированные библиотеки¶
Хотя это и не является общепринятой практикой, аддоны Python могут распространяться с собственными предварительно скомпилированными библиотеками. В отличие от обычных скриптов Python, они не переносятся между разными платформами.
Возможно, библиотека несовместима с вашей установкой Blender (попытка загрузить библиотеку, созданную для другой версии Python, или загрузка 32-битной библиотеки в 64-битной системе).
Если аддон содержит файлы .pyd
или .so
, убедитесь, что дистрибутив совместим с вашей операционной системой.
Специфично для платформы¶
Windows¶
Смешанные библиотеки Python (DLLs)¶
If Python is raising errors or you have an add-on that just fails when enabled with an error – e.g: ... is not a
valid Win32 application.
– this may be caused by some inconsistency in the Python libraries. While Blender comes with
its own bundled Python interpreter, duplicate, incompatible libraries can cause problems.

Обратная трассировка 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)