# EDIT (Solution):

I was able to fix this by adding the following line:

bpy.context.scene.render.engine = 'CYCLES'


This works fine for me as I need to use the cycles engine anyways

# Original Post:

I'm writing a standalone python script to render .OBJ files automatically, without a .blend file or anything. I installed bpy 2.82 on my windows machine using the instructions found here. And I have python 3.7.9 installed.

Currently, as just a test to get my bearings, I tried the following code to try to setup a simple scene, load in a .OBJ, and render it out:

    import bpy
import os

maplet_path = 'obj_files\\bunny.obj'
image_out_path = 'render.png'

# Create a Scene:
scene       = bpy.data.scenes.new("Scene")
camera_data = bpy.data.cameras.new("Camera")
light_data  = bpy.data.lights.new(name="Light", type='SUN')

# Import the maplet data:
local_path = os.getcwd()
bpy.ops.import_scene.obj(filepath=os.path.join(local_path,maplet_path))
scene.render.filepath = os.path.join(local_path,image_out_path)
scene.render.image_settings.file_format='PNG'

# Get handles for all objects:
maplet = bpy.context.selected_objects[0]
scene = bpy.data.scenes.new("Scene")
camera = bpy.data.objects.new("Camera", camera_data)
sun    = bpy.data.objects.new(name="Light", object_data=light_data)

# Setup camera parameters:
scene.render.resolution_x = 1920
scene.render.resolution_y = 1080
camera.location = (-2.0, 3.0, 3.0)
camera.rotation_euler = ([radians(a) for a in (422.0, 0.0, 149)])

# Setup scene:
sun.location = (2.0,2.0,2.0)
maplet.location = (0,0,0)
maplet.rotation_euler = (0,0,0)

# Add camera to the scene:
scene.camera = camera

# Update the scene:
bpy.context.view_layer.update()

# Render:
bpy.ops.render.render("EXEC_DEFAULT",write_still=True)
bpy.data.images['Render Result'].save_render(os.path.join(local_path,image_out_path))
print('hi')


Unfortunately, the program runs perfectly fine, but once it gets to the line:

bpy.ops.render.render("EXEC_DEFAULT",write_still=True)


it hangs for a moment, and then just exits. It never prints 'hi', and it never writes any image. It also doesn't print out any errors or anything else, it just stops running.

I tried stepping through with pdb and it appears to hang/fail at:

c:\......\python\python37\2.82\scripts\modules\bpy\ops.py(182)idname_py()-'render.render'
-> return self._module + "." + self._func


Is there something wrong with how I went about installing bpy? Or something wrong with the script I've written?

• Can you start python 3.7.9 from terminal, and do a bare bones import bpy followed by bpy.ops.render.render() ? Just checked (have bpy 2.90.2 built against python 3.8.2 (ubuntu) and that simple test segfaults) Feb 14, 2021 at 15:15
• @batFINGER I just tried that, and you're right, it fails. It doesn't give me any segfault errors, it just exits (so thats likely whats going on). Which is weird... because I have 100% used the my computers python37/bpy install to render from a .blend file (for some automation I needed before). I'm not sure what could have changed... Feb 14, 2021 at 23:21
• @batFINGER I was able to fix this issue by adding: bpy.context.scene.render.engine = 'CYCLES' to the script. Which is a desireable fix for me anyways, since I want to be using cycles for this project anyways. Unsure if that'll help those looking for eevee Feb 14, 2021 at 23:28

bpy.context.scene.render.engine = 'CYCLES'