__file__ 在 Maya 中未定义(#NameError)

__file__ in Maya not defined(#NameError)

这似乎是一个被问到很多的问题,但到目前为止我还没有找到有效的答案。

我正在使用 Maya 2020 并尝试制作一个需要使用一些相对和绝对路径的脚本。

这是我的脚本:

import os

print os.path.dirname(os.path.realpath(__file__)) + os.sep

这是我的脚本的路径: Y:\New folder\my_script.py

当我运行:

execfile("Y:\New folder\my_script.py")

我总是得到错误:

# NameError: name '__file__' is not defined #

为什么会这样?

首先,execfile是Python3中的弃用函数,最好避免使用。他们建议改用 exec(open(fn).read()) (实际上,这就是它在幕后的工作方式)。如果您查看建议的替换,您会明白为什么未定义 __file__(它不是文件,而是解释为 Python 代码的文本)。

在 Maya 中导入文件的常用方法是将它们放置在添加到 PYTHONPATH 的目录中。用户的文档中有一个默认的 Maya 脚本目录。根据您的平台和 Maya 版本,这可能是:C:\Users\<your_user>\Documents\maya20\scripts 另一种选择是将您的目录添加到 PATH。通常这看起来像这样:

import sys
MY_SCRIPT_PATH = "/Some/path/with/my/scripts"
if MY_SCRIPT_PATH not in sys.path:
    sys.path.append(MY_SCRIPT_PATH

然后如果您的脚本文件名为 my_script.py 您可以导入它:

import my_script

现在您的 __file__ 变量将按预期工作。

P.S。如果您更改文件并想重新加载:

reload(my_script)