繁体   English   中英

在python中导入模块/脚本

[英]importing modules/scripts in python

因此,在工作中,我正在为我们开发一种向整个团队推出工具/插件的方法。 实际上,我已经启动并运行了系统,除了我要谈论的主题之外,它是完全动态的(这全部是在python中完成的)。 在启动时,Maya会对照服务器上的文件夹检查本地文件夹,并检查它们是否不同,并处理和复制所需的文件/目录以及删除我们在服务器上删除的旧插件。 该系统足够灵活,用户可以创建所有插件的自定义架子,并且我们可以在不破坏所有用户架子的情况下重新组织后端的文件夹。 可通过Maya主界面中的下拉菜单访问插件,我们可以在不干扰代码的情况下将子文件夹免费添加到系统和插件中。 我们还可以安排通过文件夹的简单编号系统显示菜单项和插件的顺序。

在我制作插件之前,这一切都很好,当它们将模块导入其文件夹时,也是动态的。 因此,当我开始在根目录周围移动plugins文件夹时,如果我有一个为其创建路径的导入模块,则此时插件脚本中的导入模块路径现在是错误的。 我已经有一种方法可以通过菜单设置来获取正确的插件路径信息。 我在导入模块和在该模块中访问类时遇到问题。

所以如果导入模块类的标准

from fileName import className

和我使用的__import__方式看起来像。

className = __import__("folderN.folderN.folderN.fileName", {}, {}, ["className"])

但是使用该方法,我失去了像使用常规from导入方法那样仅调用该类名的能力。 我通过这样做解决了

className = className.className

但这是一个相当丑陋的方法,我希望能够仅导入和调用名称,而无需执行此额外步骤。 我不太了解此导入方法,并且我知道它缺少一些东西。

我会以错误的方式进行此导入过程吗? 有没有一种方法可以使它查看插件的本地目录,而无需附加到maya的路径,这样我就可以执行常规的导入方法,而无需在每次移动插件时都需要更改的怪异路径?

__import__不起作用,就像您假设的那样。 它为提供的导入路径返回一个模块对象,并确保您在列表中指定的所有子级均已明确导入。 对于类,这并没有真正的区别。

mod = __import__('a.b', {}, {}, ['c', 'd'])

更精确地相当于

import a.b
try:
    import a.b.c
except ImportError:
    pass
try:
    import a.b.d
except ImportError:
    pass
mod = a.b

您实际上可能想要的是这样的东西

child = getattr(__import__(import_path, {}, {}, [child_name]), child_name)

至于版本和分发系统,您是否考虑过使用SCM / VCS(例如SVN或GIT)和/或程序包管理系统? 与直接的文件共享相比,它们为您提供了更好的更改跟踪和同步,并且您可以轻松地将它们与客户端计算机上的同步/安装脚本集成在一起,可以根据客户端的特定配置需求进行自定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM