【问题标题】:Blender Python `bpy` `__init__.py`, apparently importing from a non-existent module `_bpy`Blender Python`bpy``__init__.py`,显然是从一个不存在的模块`_bpy`导入的
【发布时间】:2016-09-08 07:03:55
【问题描述】:

我正在使用带有 PyCharm 和 Python 3.5.1 和 Blender 2.77 的 Mac OS X。

我正在将 Blender 与 Python 脚本一起使用。我知道为了运行使用 Blender 的 Python 脚本(即导入 bpy),我需要使用 blender -b -P /path/to/my_python_script.py 从命令行运行它(虽然我真的不知道为什么)。这一切都很好,它可以工作,但我希望我可以从 Python 内部运行它,因为我将这些脚本与其他非 Blender Python 代码一起使用,并且我喜欢使用 PyCharm 来调试和做几乎所有事情。我知道我不能只从 PyCharm 运行 Blender Python 脚本,但我想我还是会尝试。我通过编辑“首选项”中的“项目结构”设置来确保 PyCharm 可以看到bpy 模块,以包括bpy 模块所在的父目录,在我的机器上是/Applications/blender.app/Contents/Resources/2.77/scripts/modules。但是,当我尝试运行脚本时,它会给出ImportError: No module named '_bpy'。我跟踪了错误的来源,罪魁祸首是bpy模块中__init__.py文件中的一行(我机器上的位置是/Applications/blender.app/Contents/Resources/2.77/scripts/modules/bpy/__init__.py);该行是:

from _bpy import types, props, app, data, context

所以我尝试在我的机器上搜索模块_bpy,但在任何地方都找不到。所以它似乎是从一个不存在的模块中导入东西。但是,我知道我的脚本可以正常工作,因为我已经在 Blender 中成功运行了它。

所以我的问题是,神秘的 _bpy 模块到底发生了什么巫术,我和 PyCharm 都找不到,但 Blender 应用程序没有问题?我希望对这里可能发生的事情有一个大致的了解,因此欢迎有根据的猜测(当然还有准确的答案)。

【问题讨论】:

  • 输入import _bpy;_bpy.__file__时的输出是什么
  • ImportError: No module named '_bpy'
  • 我假设 _bpy 模块内置在搅拌机中并且没有任何源文件。
  • 它是如何工作的?我的意思是,如果我尝试将一个模块构建到一个程序中并在不分发源代码的情况下分发该程序,我将如何去做?

标签: python module blender init


【解决方案1】:

你有没有注意到 line before from _bpy import... 上面写着 # internal blender C module 这应该是赠品。

使这项工作的巫术是搅拌器二进制包含_bpy作为二进制python模块,搅拌器使该模块可在搅拌器附带的python解释器中访问,它在初始化期间执行此操作python解释器的。普通的 blender 二进制文件如果没有被构建到 Python 模块中,就不能导入到 Blender 之外的 Python 解释器中(见下文)。

要弄清楚如何做,您可以从Python's c-api 上的 Python 文档开始。您可能还想查看 source/blender/python 中的 blender 源代码,在那里您会找到用于构建 blender 的主要基于 C 的模块的 C 文件,例如 bpy、bgl、bmesh、mathutils。

另请参阅this answer,其中包含有关将搅拌机构建为 Python 模块的信息的链接,因此可以将其导入(无需 gui)到外部 Python 解释器中。如果你在 blender.stackexchange.com 搜索 pycharm,你会发现几个关于在 pycharm 和 eclipse 中使用 bpy 的答案,包括让 blender 作为外部解释器运行以进行调试的方法。

【讨论】:

  • 正是我正在寻找的那种答案。进一步阅读的建议是一大优势。谢谢!
猜你喜欢
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2013-04-21
  • 2018-10-27
  • 2013-07-29
  • 2022-01-14
相关资源
最近更新 更多