Open diazjacob opened 5 months ago
运行环境:戴森球计划dspgame BepInEx5.4.23.1 + IronPython3.4.1+net4.6.2 [Message: BepInEx] BepInEx 5.4.23.1 - DSPGAME (2024/6/4 11:31:23) [Info : BepInEx] Running under Unity v2018.4.12.5889476 [Info : BepInEx] CLR runtime version: 4.0.30319.17020
i meet the same wrong i use import deal with it, not use scope: pyfile global a =0 // print(a) --> 0 void Start() engine.Execute("import manage; manage.Start()"); // a +=1 print(a) --> 1 void Update() engine.Execute("import manage; manage.Update()"); // a +=1 print(a) --> 2 void OnGUI() engine.Execute("import manage; manage.OnGUI()"); // a +=1 print(a) --> 3 使用python模块脚本的全局单一特性,存储数据,从而保证数据的一致性。 (不管import多少次,只有第1次import是生效的,而其他import则是调用)
===============================================
using System; using System.Collections;
using UnityEngine;
using BepInEx; using HarmonyLib;
using IronPython.Hosting; using IronPython.Runtime;
using System.IO; using Microsoft.Scripting.Runtime; using Microsoft.Scripting; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Scripting.Hosting; using System.Reflection; using System.Runtime.Remoting.Contexts;
namespace IronPython3Mod { [BepInPlugin(GUID, NAME, VERSION)] [BepInProcess(GAME_PROCESS)] public class Plugin : BaseUnityPlugin { public const string GUID = "cn.zhufile.dsp.zhu_ironpython3_mod"; public const string NAME = "IronPython3Mod"; public const string VERSION = "1.0.7"; private const string GAME_PROCESS = "DSPGAME.exe";
public static ScriptEngine engine = null;
public static float time = 0;
public void Start()
{
engine = Python.CreateEngine();// Create a new IronPython engine
// engine.Execute("print('111111111111111111')"); // OK, it work!!!
// Set up the search paths for the Python script
var searchPaths = engine.GetSearchPaths();
searchPaths.Add("BepInEx\\plugins\\IronPython3\\net462\\Lib");
searchPaths.Add("BepInEx\\plugins\\IronPython3\\mod");
searchPaths.Add("BepInEx\\plugins\\IronPython3\\modmanage");
engine.SetSearchPaths(searchPaths);
// 运行python脚本文件,加载mod
engine.Execute("import manage; manage.Start()");
}
public void Update()
{
time += Time.deltaTime; // 每帧的时间间隔,单位秒
if (time > 30)
{
time = 0;
engine.Execute("import manage; manage.Update()");
}
}
public void OnGUI()
{
engine.Execute("import manage; manage.OnGUI()");
}
}
============================================== anather, there are many different in ipy.exe and bepinex‘s ironpython3 engine for example, a = os.listdir(".") do it in ipy.exe, but in bepinex‘s ironpython3 engine is wrong !!!
Prerequisites
I'm working to add the latest stable version of IronPython to a large existing project. This project runs .NET 4.7.2, built for Windows x64 and built on Windows 10 with Visual Studio 2022. IronPython was added via NuGet.
I've had this issue for quite a while and have done a significant amount of research, but there is not much information on this topic.
Description
When running IronPython the initialization of an engine with
Python.CreateEngine();
functions properly, but when I attempt to executeengine.Execute(code, scope);
with the correct relevant code string and scope object I get a PlatformNotSupportedException. I have had a great deal of trouble trying to find the cause of this issue. This is the specific error:Any help or recommendations on project details I need to verify would be greatly appreciated. Thanks!