繁体   English   中英

来自另一个py文件的maya python调用函数

[英]maya python call function from another py file

我有一个python脚本保存到文件。

test1.py

import maya.cmds as cmds
import sys

def process():
    print 'working'

我需要在Maya内的另一个python脚本中从此脚本运行该函数。 我有:

import sys
sys.path.append('J:\scripts\src\maya')

from test1 import process

test1.process()

但这给了我:

from test1 import process
# Error: ImportError: file <maya console> line 4: cannot import name process # 

我在这里做错了什么?

(“ import test1”没有错误,因此路径正确)。

解:

重新加载您的test1模块,我猜是您创建并导入了test1但内部没有process方法。 为了有效地重新加载模块,您不能只重新导入它,而必须使用重新加载。

reload(test1)
from test1 import process

其他观察:

使用路径时使用原始字符串:

在路径字符串前添加rsys.path.append(r'J:\\scripts\\src\\maya')

Python文档

反斜杠()字符用于转义具有特殊含义的字符,例如换行符,反斜杠本身或引号字符。 字符串文字可以选择以字母“ r”或“ R”为前缀; 这样的字符串称为原始字符串,并使用不同的规则来解释反斜杠转义序列。

检查导入模块的方式:

您写的,这是无效的:

from test1 import process
test1.process()

但是您可以选择以下两种方式之一:

import test1 
test1.process()

要么:

from test1 import process
process()

总结一下,这些是导入模块或包的方法:

>>> import test_imports
>>> from test_imports import top_package
>>> from test_imports import top_module
test_imports.top_module
>>> from test_imports.top_package import sub_module
test_imports.top_package.sub_module

假设您具有以下层次结构:

J:\scripts\src\maya # <-- you are here
.
`-- test_imports
    |-- __init__.py
    |-- top_package
    |   |-- __init__.py
    |   |-- sub_package
    |   |   |-- __init__.py
    |   |   `-- other_module.py
    |   |-- sub_module.py
    `-- top_module.py

致谢Sam&Max博客 (法语)

首先,您需要在系统路径中添加脚本位置路径。

并且如果您将其作为python软件包制作,请不要忘记在软件包目录中添加__init__.py文件。

比您可以执行以下代码。

import sys
path = r'J:\scripts\src\maya'
if path not in sys.path:
    sys.path.append(path)

import test1
test1.process()

暂无
暂无

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

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