子目录中的导入脚本不起作用... Blender Add-On

Posted

技术标签:

【中文标题】子目录中的导入脚本不起作用... Blender Add-On【英文标题】:Import script in sub directory not working... Blender Add-On 【发布时间】:2021-03-22 15:13:35 【问题描述】:

我有一个这样的文件夹结构:

C: 
|_Blueprint
│   main.py
│
└───toolbox
        blueprint_tools.py

当我在 Blender 的脚本文本页面中运行这段代码时:

from toolbox.blueprint_tools import dimension, array, modify

我在控制台中收到错误

Traceback (most recent call last):
  File "\main.py", line 20, in <module>
ModuleNotFoundError: No module named 'toolbox'
Error: Python script failed, check the message in the system console

我发誓,当我在 Blender 之外(在其他项目上)运行此代码时,此结构和代码运行良好。但是在 Blender 中运行此脚本以测试我的附加组件时出现错误。

如果我将 Blueprint 文件夹编译成 .zip 并安装它,一切正常...... ?? 我迷路了,谁能帮帮我。

如果我像这样运行代码:(在 CWD 工具箱之前添加一个 .)

from .toolbox.blueprint_tools import dimension, array, modify
Traceback (most recent call last):
  File "\main.py", line 20, in <module>
ImportError: attempted relative import with no known parent package
Error: Python script failed, check the message in the system console

【问题讨论】:

What should I do when someone answers my question? 【参考方案1】:

你的两个错误跟踪都写File \main.py ...,这意味着Blender认为你的main.py文件在根文件夹中,知道它在文件系统层次结构中的真实位置。

当您将结构安装为 zip 文件时,您向 Blender 提供了所有必要的信息。


附录:

暂时,在开发/调试您的插件期间,您可以将完整路径(用于查找您的toolbox.blueprint_tools 模块)添加到sys.path 变量中。

有两种可能:


    将这些命令插入到您的main.py 文件中(当然,使用toolbox 文件夹的您的 文件夹的路径):

    import sys
    sys.path += [r"C:\Users\Davi\Documents\Python\PARENT_of_toolbox"]
    

    之前你的陈述

    from toolbox.blueprint_tools import dimension, array, modify 
    

    命令,或


    将这些命令插入到您的main.py 文件中(当然,使用您的 toolbox 文件夹的路径):

    import sys
    sys.path += [r"C:\Users\Davi\Documents\Python\PARENT_of_toolbox\toolbox"]
    

    之前您的修改声明

    from blueprint_tools import dimension, array, modify
    

【讨论】:

谢谢您,您的回答很有道理。但我想唯一剩下的就是如何为 Blender 提供在 Blender 中运行我的脚本以进行测试所需的所有信息? 使用压缩文件,就像你已经做的那样。您可以在Blender StackExchange 中找到有关 Blender 特定问题的更多信息。也许 [这个答案](使用 zip 文件,就像你已经做过的那样。你可以在 Blender StackExchange 中找到有关 Blender 特定问题的更多信息。也许 this answer。 再次感谢,不得不编译一个 zip 并安装它只是为了看到我对附加组件所做的一个小改动,只是为了进行新的更改,并且必须卸载重新编译并重试,这真是太可怕了……你明白我的意思。这个疯狂的东西可以作为 zip 安装,但不能作为在 Blenders 脚本面板中运行的 python.py 文件。 MarianD 非常感谢。明天早上我会试一试,然后报告。感谢您的帮助。

以上是关于子目录中的导入脚本不起作用... Blender Add-On的主要内容,如果未能解决你的问题,请参考以下文章

当文件位于同一目录并调用脚本时,导入不起作用

在 Blender 中运行 python 脚本

Blender 3D python为每个姿势骨骼添加一个约束不起作用

如何将 json 文件导入 Blender?

Blender 到 Unity3D:在 Unity 中应用材质

为啥包含导入和脚本后数据表选项不起作用