Если для работы в Blender необходимо установить дополнительные пакеты модулей на Python, которые не установлены в Blender по умолчанию, вы можете сделать это через pip.
Однако, если вы работаете на операционной системе Windows 10, интерпретатор Python устанавливает новые пакеты не в директорию установки Blender, а в персональную директорию пользователя Windows.
В процессе установки в консоль выводится предупреждение:
Defaulting to user installation because normal site-packages is not writeable
Установка пакетов все-таки производится, но они устанавливаются в директорию:
c:\Users\_имя_пользователя_\AppData\Roaming\Python\Python39\site-packages\
В результате пакеты устанавливаются в систему, но не доступны из Blender – к ним нельзя получить доступ из Python-консоли или текстового редактора Blender при помощи команды import.
Решить проблему можно, жестко указав директорию, в которую pip должен установить нужные пакеты. Это директория “site-packages”, расположенная внутри директории, куда установлен Blender на вашем компьютере.
Определим 2 переменные – в первую запишем путь к исполняемому файлу python.exe в Blender, во вторую – путь, куда будут устанавливаться пакеты.
1 2 3 4 5 6 7 8 |
import sys import os python_exe = os.path.join(sys.prefix, 'bin', 'python.exe') # C:\Program Files\blender3-0\3.0\python\bin\python.exe target = os.path.join(sys.prefix, 'lib', 'site-packages') # C:\Program Files\blender3-0\3.0\python\lib\site-packages |
Обновим pip до последней версии:
1 2 3 4 |
import subprocess subprocess.call([python_exe, '-m', 'ensurepip']) subprocess.call([python_exe, '-m', 'pip', 'install', '--upgrade', 'pip']) |
И установим нужный пакет, указав ему директорию назначения:
1 |
subprocess.call([python_exe, '-m', 'pip', 'install', '--upgrade', 'scipy', '-t', target]) |
Полный код:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import subprocess import sys import os python_exe = os.path.join(sys.prefix, 'bin', 'python.exe') target = os.path.join(sys.prefix, 'lib', 'site-packages') subprocess.call([python_exe, '-m', 'ensurepip']) subprocess.call([python_exe, '-m', 'pip', 'install', '--upgrade', 'pip']) subprocess.call([python_exe, '-m', 'pip', 'install', '--upgrade', 'scipy', '-t', target]) print('FINISHED') |
Теперь пакеты будут установлены правильно, в директорию внутри Blender, и их можно будет использовать в работе.
1 |
import scipy |