枫叶棋语 发表于 2023-3-4 21:59:59

Pycad 利用pythonnet引用Cpython库numpy

本帖最后由 枫叶棋语 于 2023-3-7 00:59 编辑

需要加载导入pythonnet包,关键在于将Ironpython对象转换成Cpython对象,转换后,就如在Cpython中使用一样。
需要安装Python 3.8,并添加路径

import sys
sys.path.append(r'D:\Pycad\src\packages\pythonnet.3.0.1\lib\netstandard2.0')
sys.path.append(r'D:\Pycad\src\packages\Python.Included.3.11.1\lib\netstandard2.0')
sys.path.append(r'D:\Pycad\src\packages\Python.Deployment.2.0.0\lib\netstandard2.0')
sys.path.append(r'D:\Program Files\Python38')

import clr
clr.AddReference('Python.Runtime.dll')
clr.AddReference('Python.Deployment.dll')
clr.AddReference('Python.Included.dll')

from Python.Runtime import *
from Python.Deployment import *
from Python.Included import *
if not PythonEngine.IsInitialized:
    PythonEngine.Initialize()

def CpythonConvertToIron(object):
    return eval(object.ToString())

def IronConverToCpython(object):
    return PythonEngine.Eval(str(object))
with Py.GIL():
    np = Py.Import("numpy")
    list1= [,]
    list2=IronConverToCpython(list1)
    arr=np.asarray(list2)

最终结果
>>>arr
[
]







枫叶棋语 发表于 2023-3-4 22:06:06

本帖最后由 枫叶棋语 于 2023-3-4 22:07 编辑

np数组转为list用以下方法:
list1= arr.tolist()
list2=CpythonConvertToIron(list1)


>>>list1= arr.tolist()
>>>list2=CpythonConvertToIron(list1)
>>>list2
[, ]
>>>

陨落 发表于 2023-3-6 17:58:36

我只想问下这位大神怎么研究出来的。如何才能达到这样的高度?
同样的代码我用到犀牛grasshopper里面也成功了

枫叶棋语 发表于 2023-3-7 00:57:17

陨落 发表于 2023-3-6 17:58
我只想问下这位大神怎么研究出来的。如何才能达到这样的高度?
同样的代码我用到犀牛grasshopper里面也成 ...

数据转换还是有限制,要是能通用就更好了

qwh923820 发表于 2023-3-15 07:44:14

优秀,回帖是一种美德:D-

ymin 发表于 2023-3-25 19:27:47

大佬 这两个路径是要安装什么库才有啊sys.path.append(r'D:\Pycad\src\packages\Python.Included.3.11.1\lib\netstandard2.0')
sys.path.append(r'D:\Pycad\src\packages\Python.Deployment.2.0.0\lib\netstandard2.0')

枫叶棋语 发表于 2023-4-5 12:01:17

ymin 发表于 2023-3-25 19:27
大佬 这两个路径是要安装什么库才有啊sys.path.append(r'D:\Pycad\src\packages\Python.Included.3.11.1\li ...

import sys
import clr
sys.path.append(r'D:\Program Files\Python38')
sys.path.append(r'D:\Program Files\Python38\Lib\site-packages')
sys.path.append(r'D:\Program Files\Python38\Lib\site-packages\pythonnet\runtime')
clr.AddReference('Python.Runtime')
from Python.Runtime import *
import os
os.environ["PYTHONHOME"] = r'D:\Program Files\Python38'
os.environ["PYTHONNET_PYDLL"]=r'D:\Program Files\Python38\python38.dll'
os.environ['PYTHONPATH'] = r'D:\Program Files\Python38\Lib' + ';' +r'D:\Program Files\Python38\Lib\site-packages'

枫叶棋语 发表于 2023-4-5 12:03:41

pyb =Py.Import('builtins')
py_float=pyb.float
py_int=pyb.int
py_str=pyb.str
py_tuple=pyb.tuple
py_list=pyb.list
py_set=pyb.set
py_dict=pyb.dict
这样可以直接使用Cpython里面的基本函数,dir(pyb),可以看到更多内容
页: [1]
查看完整版本: Pycad 利用pythonnet引用Cpython库numpy