本文详解如何在 siemen

Siemens NX 的 NXOpen API 并非一个可通过 pip install nxopen 安装的独立 Python 包——它是由 NX 软件自身提供的原生 .NET/Python 绑定库,深度集成于 NX 运行时环境。你遇到的 ModuleNotFoundError: No module named 'NXOpen' 错误,根本原因在于:你在外部 Python 解释器(如 VS Code 或命令行)中直接运行了依赖 NXOpen 的脚本,而该解释器无法访问 NX 的运行时上下文与底层 DLL/CLR 组件。
✅ 正确使用方式如下:
不安装任何 PyPI 版本的 nxopen
删除通过 pip install nxopen 安装的第三方包(它与 Siemens 官方 NXOpen 无关,甚至可能引发冲突):
pip uninstall nxopen
脚本必须在 NX 内部执行
修正代码:适配 NXOpen 原生 Python 接口
注意:NX 内置 Python 使用的是 NXOpen(首字母大写)模块名,且无需手动 session.close()(NX 会自动管理生命周期)。以下是修正后的可靠示例:
import NXOpen
import os
def get_mass_properties(file_path):
# 验证文件存在且可读
if not os.path.exists(file_path):
raise ValueError(f"File not found: {file_path}")
if not os.access(file_path, os.R_OK):
raise PermissionError(f"Insufficient permissions to access file: {file_path}")
# 获取当前 NX 会话(无需 new Session())
the_session = NXOpen.Session.GetSession()
work_part = the_session.Parts.Work
# 关闭当前工作部件(如有),再打开目标 .prt
if work_part is not None:
the_session.Parts.CloseAll(False)
# 打开指定部件文件
part_load_options = the_session.TransientPartLoadOptions
part_load_options.DisplayPart = False
part_load_options.LoadGeometry = True
part_load_options.LoadAttributes = True
opened_part = the_session.Parts.Open(file_path, part_load_options)
the_session.Parts.SetWork(opened_part)
# 获取实体体并计算质量属性
bodies = opened_part.Bodies
solid_bodies = [body for body in bodies if body.Type == NXOpen.Body.Types.Solid]
if len(solid_bodies) != 1:
raise RuntimeError(f"Unsupported file: expected exactly 1 solid body, got {len(solid_bodies)}")
mass_props = opened_part.MeasureManager.CreateMassProperties()
mass_props.Compute()
mass = mass_props.Mass # 单位:克(取决于建模单位制)
# 可选:获取完整质量属性(质心、惯性矩等)
# print(f"Mass: {mass:.3f} g")
# print(f"Centroid: {mass_props.Centroid}")
# 关闭部件(非必需,但推荐释放资源)
the_session.Parts.CloseBasePart(opened_part, False)
return [mass]
# 示例调用(路径需使用正斜杠或双反斜杠)
if __name__ == "__main__":
try:
result = get_mass_properties(r"D:/NX Files/model1.prt")
print(f"Mass = {result[0]:.4f} g")
except Exception as e:
NXOpen.UI.GetUI().NXMessageBox.Show("Error", NXOpen.NXMessageBox.DialogType.Error, str(e))⚠️ 重要注意事项:
总结:NXOpen 不是“外部库”,而是 NX 的编程接口。一切脚本都必须在 NX 进程内运行——这是唯一能成功导入 NXOpen 模块并访问 CAD 数据的前提。放弃外部解释器执行思维,拥抱 NX 原生开发流程,才能真正释放自动化建模与分析的生产力。