我该如何在标准Python控制台中访问BPY?BPY是Blender-Python的东西。

15

在这里作者在17.20-17.50提到,未来可以使用标准Python解释器访问BPY。它已经有1年历史了,那么我如何在标准的Python控制台中访问BPY呢?

试验0:绕路解决方案无法在Blender内部使用子进程

subprocess.call(['vim', 'test.py'])
# some editing of BPY -file with Vim (not working currently)
subprocess.call(['python', 'test.py'])  
# trying to execute the python -file (not working currently)

测试1:在Blender外无法工作

$ cat cubes.py 
import bpy

mylayers = [False]*20
mylayers[0] = True
add_cube = bpy.ops.mesh.primitive_cube_add
for index in range(0, 5):
    add_cube(location=(index*3, 0, 0), layers=mylayers)
$ python cubes.py 
Traceback (most recent call last):
  File "cubes.py", line 1, in <module>
    import bpy
ImportError: No module named bpy

第一个和第二个有什么关系?您正在尝试通过子进程调用使用vim编辑test.py,但失败了吗? - jdi
这里有一个类似的新手问题链接,关于使用Blender-Python,他们试图制作一个动画球。 - hhh
更新:现在至少有两种不同的方法:您可以在Blender外部使用BPY(实验性属性),也可以在Blender内部使用Python(目前还没有解决方案)。 - hhh
9个回答

15
根据这些指示:链接 获取Blender源代码:
cd ~/src # or what you prefer
git clone http://git.blender.org/blender.git

cd blender
git submodule update --init --recursive
git submodule foreach git checkout master
git submodule foreach git pull --rebase origin master

处理好依赖关系,如果需要请查看 这里*,然后通过bpy目标进行编译:

cd ~/src/blender
make bpy

如果出现类似于file INSTALL cannot set permissions on [...]的错误,请以root身份再次运行后面的命令。

你的Python 3现在应该能够导入bpy了。


* 对于Debian-ish系统,请运行:

sudo apt-get install subversion build-essential gettext \
 libxi-dev libsndfile1-dev \
 libpng12-dev libjpeg-dev libfftw3-dev \
 libopenexr-dev libopenjpeg-dev \
 libopenal-dev libalut-dev libvorbis-dev \
 libglu1-mesa-dev libsdl1.2-dev libfreetype6-dev \
 libtiff4-dev libavdevice-dev \
 libavformat-dev libavutil-dev libavcodec-dev libjack-dev \
 libswscale-dev libx264-dev libmp3lame-dev python3.2-dev \
 libspnav-dev libtheora-dev libjack-dev libglew1.6-dev

给我报了一堆错误,更多在这里。按照您的指示手动安装后,我在这里找到了这个,但它有旧的包 - pastie有更新的包,但仍然有一些错误,还没有找到解决方案"Could NOT find PythonLibsUnix (missing: PYTHON_LIBRARY PYTHON_INCLUDE_DIR)"。聊天-讨论在这里。无论如何+1,也许是一个好的解决方案候选人,警惕实验! - hhh
根据此链接的说明,您需要安装python-devel。同时请确保正在使用Python >= 3.2。 - Tobias Kienzler
是的,你的 apt-get 缺少 python3.2-dev,你需要安装它(它不是 Python 本身的依赖项)。 - Tobias Kienzler
@hhh 你安装了python3.2-dev并重试了吗? - Tobias Kienzler

14

如果这仍然相关,您可以在Blender的上下文中运行一个脚本,如下所示(-b使其无头,因此您可以在没有X11的渲染服务器上运行它):

blender -b -P script.py

想要获取更多选项,请参阅blender --help

如果您想将blender连接到IPython控制台,以便通过Python与blender进行交互,则可以使用我刚编写的此脚本:https://github.com/panzi/blender_ipython

启动笔记本:

./blender_ipython.py notebook

启动 Qt 控制台:

./blender_ipython.py qtconsole

3

1
这可能是一些用户+1的解决方案,Eclipse Blender的直接链接在此处。从第40页开始,对于某些人来说可能有用的东西,无论如何并不直接回答问题。 - hhh

1

1
在你贴出的视频链接中,并没有提到使用标准Python解释器运行独立的Blender Python脚本。你在视频中看到的是他们打开了内置于Blender中的交互式解释器控制台。
Blender需要自己捆绑的Python环境,如果您想尝试使用标准Python解释器运行脚本,则必须设置环境以包括来自Blender包的所有软件包。虽然似乎这可能甚至不可能,因为我认为Blender的Python已经被修改过了。
Blender可执行文件似乎允许您通过以下方式运行Python脚本:
/path/to/blender -P cubes.py 还可以通过以下方式从bash shell启动交互式控制台:
/path/to/blender --python-console

你能否提供一些使用 /path/to/blender --python-console 命令的演示(附带一些简单的例子和历史文件会很有用)?我只看到了一个灰色区域,虽然命令可以正常工作,我也可以导入 bpy,但是我看不到任何东西——而且我可以明显地看到它已经被修改了,exit() 无法正常工作... - hhh
@hhh:很遗憾,我不熟悉Blender API。我只能就你为什么无法在标准Python解释器中运行它给出一些见解。你可能只需要在互联网上查找一些示例来学习其API。我相信有很多这样的资源。 - jdi
你实际上可以将Blender编译为Python 3模块。 - Tobias Kienzler

0

您可以在Blender的文本编辑器中编写任何脚本,并在Blender的Python控制台中进行调试,以下是方法:

1.创建您的脚本文件并将代码放入其中。

  1. 在Blender中打开Python控制台,然后在其中键入: bpy.data.texts[INDEX_OF_YOUR_FILE].as_module()

    INDEX_OF_YOUR_FILE是文本编辑器中下拉菜单中文本列表中您的文件的索引。


0

我是编程新手,但我发现了一个简单的解决方法,我使用操作系统的命令行终端。我的程序看起来有点像这样。

import os
os.system("cd /home/")

(那就是我的搅拌机所在的地方)

然后我使用终端命令的方式与使用cd命令的方式相同。

https://docs.blender.org/manual/en/dev/render/workflows/command_line.html


0
有人创建了一个存根API生成器。他甚至在Github上托管了生成的bpy,适用于Blender版本2.78、2.79和2.80。这应该足够让你在IDE(例如PyCharm)中编写代码了。我发现生成的代码中有一些语法错误,你需要修复它们。还有一份文档。

https://github.com/nutti/fake-bpy-module/tree/master/premade_modules/2.79

如果Nutti的文档有所缺失,这里有一个网站提供安装指南。

https://b3d.interplanety.org/en/using-external-ide-pycharm-for-writing-blender-scripts/

要运行代码,您必须像其他答案已经指出的那样使用Blender的Python。
blender -b -P script.py

抱歉,只提供链接的回答。


0
你可以使用Blender在命令行中运行Python脚本,可以选择在后台运行或前台运行。打开终端/CMD并进入Blender安装目录,然后输入以下命令 -
blender -b -P path/to/your/script.py 

在编程方面,参数-b用于在后台运行Blender。而-P则表示使用Blender的Python运行一个Python脚本。如果你想要打开Blender的GUI并执行py脚本,可以运行以下代码:

blender -P path/to/your/script.py

在作为子进程运行时,请使用以下代码:
import subprocess
subprocess.run(['blender', '-b', '-P', 'path/to/your/script.py'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接