首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bpy在全球范围内工作,但在烧瓶应用程序中不起作用。

bpy在全球范围内工作,但在烧瓶应用程序中不起作用。
EN

Stack Overflow用户
提问于 2021-01-12 13:57:22
回答 2查看 425关注 0票数 0

我一直在使用javascript,最近我开始使用python来使用搅拌器-python库。(Bpy)因此,由于对语言行为缺乏了解,这个问题可能是我的一些误解。

此函数使用bpy。我进行了测试,并成功地将.gltf文件转换为.fbx。

代码语言:javascript
复制
import os
import bpy

path = os.getcwd()
UPLOAD_FOLDER = os.path.join(path, 'uploads')
DOWNLOAD_FOLDER = os.path.join(path, 'downloads')

def gltf_to_fbx(filename):
    path = os.path.join(UPLOAD_FOLDER, filename)
    bpy.ops.import_scene.gltf(filepath = path)
    portion = os.path.splitext(filename)
    newname = portion[0] + ".fbx"
    path_to_file = os.path.join(DOWNLOAD_FOLDER, newname)
    bpy.ops.export_scene.fbx(filepath = path_to_file)
    bpy.ops.object.delete()

gltf_to_fbx("1.gltf")

然而,当我像这样在烧瓶应用路由器中运行它时,它会抛出一个错误。

代码语言:javascript
复制
from flask import Flask, flash, request

app = Flask(__name__)

@app.route('/', methods=['POST'])
def upload_file():
    file = request.files['model']
    filename = secure_filename(file.filename)
    save_path = os.path.join(UPLOAD_FOLDER, filename)
    file.save(save_path)
    gltf_to_fbx(filename)
    flash('File successfully uploaded')
    return "Success"

if __name__ == "__main__":
    app.run(host="localhost", port = 5000)

这是错误消息

代码语言:javascript
复制
...
  File "index.py", line 62, in upload_file
    gltf_to_fbx("1_1.gltf")
  File "index.py", line 32, in gltf_to_fbx
    bpy.ops.import_scene.gltf(filepath = path)
  File "C:\ProgramData\Blender Foundation\Blender\2.82\scripts\modules\bpy\ops.py", line 201, in __call__       
    ret = op_call(self.idname_py(), None, kw)
RuntimeError: Error: Traceback (most recent call last):
  File "C:\ProgramData\Blender Foundation\Blender\2.82\scripts\addons\io_scene_gltf2\__init__.py", line 850, in 
execute
    return self.import_gltf2(context)
  File "C:\ProgramData\Blender Foundation\Blender\2.82\scripts\addons\io_scene_gltf2\__init__.py", line 869, in 
import_gltf2
    return self.unit_import(self.filepath, import_settings)
  File "C:\ProgramData\Blender Foundation\Blender\2.82\scripts\addons\io_scene_gltf2\__init__.py", line 887, in 
unit_import
    BlenderGlTF.create(self.gltf_importer)
  File "C:\ProgramData\Blender Foundation\Blender\2.82\scripts\addons\io_scene_gltf2\blender\imp\gltf2_blender_gltf.py", line 41, in create
    BlenderScene.create(gltf, scene_idx)
  File "C:\ProgramData\Blender Foundation\Blender\2.82\scripts\addons\io_scene_gltf2\blender\imp\gltf2_blender_scene.py", line 53, in create
    bpy.context.window.scene = bpy.data.scenes[gltf.blender_scene]
AttributeError: 'NoneType' object has no attribute 'scene'

location: C:\ProgramData\Blender Foundation\Blender\2.82\scripts\modules\bpy\ops.py:201

错误消息似乎是说它不能导入文件,因为它是.不对?但这是没有意义的,因为它没有抛出错误,当它运行出烧瓶应用程序。

我想,在bpy尝试加载它之前,文件可能没有保存,但没有。我还尝试使用已经保存的文件路径运行gltf_to_fbx函数,但它仍然抛出相同的错误。我能想象到的唯一原因是bpy在全球范围内工作,而不是在烧瓶应用程序中工作。这对我来说很奇怪。

任何意见都会受到赞赏。谢谢!

编辑我刚刚在bpy模块中注释掉了错误行。然后它抛出了另一个错误,我也把它注释掉了。现在起作用了!不过,我对这种解决办法并不感到自豪。我的假设是,bpy只被设计为在Blender控制台上运行。因此,import_scene.gltf函数假设系统运行了Blender上下文,而在本例中却没有。(仍然存在问题;它是如何在全局范围内无错误地运行的?)我发现这个文档解释了如何在Blender之外构建一个看起来很有希望的模块。https://wiki.blender.org/wiki/Building_Blender/Windows

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-20 07:58:00

我意识到我安装的bpy模块是不正确的。我认为bpy应该作为一个完整的模块工作,因为我在pip中找到了它(我是使用pip install bpy安装的),但实际上它假设模块是在Blender的应用程序内控制台上运行的。因此,与其通过python index.py运行应用程序,不如先在后台运行Blender,然后在上面运行python解决了问题。blender --background python index.py

票数 0
EN

Stack Overflow用户

发布于 2021-01-12 14:41:02

将全局名称path = os.getcwd()gltf_to_fbx函数行path = os.path.join(UPLOAD_FOLDER, filename)中重写为UPLOAD_FOLDER的可能问题是使用path = os.getcwd()生成路径,尝试更改为像file_path = os.path.join(UPLOAD_FOLDER, filename)这样的file_path,然后将此file_path传递给bpy,如so bpy.ops.import_scene.gltf(filepath=file_path)

这可能会有所帮助,因为错误指示NoneType没有属性scene,这对提供给bpy的不正确路径可能是正确的。

代码语言:javascript
复制
bpy.context.window.scene = bpy.data.scenes[gltf.blender_scene]
AttributeError: 'NoneType' object has no attribute 'scene'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65685398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档