Pythonnet踩坑
关于python和dotnet互相调用时遇到的一些问题
1. 安装pythonnet失败
1. pkg-config 失败
报错没有
pkg-config
,我这里是mac,所以执行:
brew install pkg-config |
❯ pkg-config --libs mono-2 |
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/Library/Frameworks/Mono.framework/Versions/6.12.0/lib/pkgconfig:$PKG_CONFIG_PATH
,添加之后能找到正确路径.
2. clang 编译问题
安装时报错如下
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /Users/lisa/mambaforge/include -arch arm64 -fPIC -O2 -isystem /Users/lisa/mambaforge/include -arch arm64 -I/Users/lisa/mambaforge/include/python3.9 -c src/monoclr/clrmod.c -o build/temp.macosx-11.0-arm64-3.9/src/monoclr/clrmod.o -D_THREAD_SAFE -I/Library/Frameworks/Mono.framework/Versions/6.12.0/lib/pkgconfig/../../include/mono-2.0 |
3. import clr 失败
ImportError Traceback (most recent call last) |
发现他对于除了win32的平台,全部都是用mono,但是我明明就是有dotnetcore的.... 然后发现他的思路是除了win32,先全部用mono去编译,编译好了再自己选择用什么runtime
from clr_loader import get_coreclr |
'/usr/local/share/dotnet/host/fxr/5.0.11/libhostfxr.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')), |
4. 从master分支安装
发现上一个release其实并不支持dotnet core, 现在尝试从master分支安装.直接拉最新的代码之后:
pip install -e . |
❯ python |
发现是mono的lib也是转译的,需要加在arm64的dotnet core. 用上面的切换运行时的方法就可以成功加载了.
5. python 调用 .net
我发现他这里有点问题,如果只添加
Nncase.Importer
会提示找不到
Nncase
的namespace,
需要添加
Nncase.Core
才可以. 并且好像是不支持嵌套的
namespace导入.反正我没法直接导入
Nncase.Importer.TFlite
,
并且python调用.net不太好调试, 所以还是放弃了.