我目前无法使用Cython嵌入功能。二进制编译正常,otool -L embedded
返回以下结果。
embedded:
@rpath/libpython3.6m.dylib (compatibility version 3.6.0, current version 3.6.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.8.0)
这是我跑的命令。为什么这不起作用的任何想法?当我想创建一个Cython模块时,使用setup.py的Cython工作正常,即我能够在Python中导入Cython模块。
$ make
gcc -c embedded.c -I/Users/$USER/miniconda3/include/python3.6m -I/Users/$USER/miniconda3/include/python3.6m
gcc -o embedded embedded.o -L/Users/$USER/miniconda3/lib -L/Users/$USER/miniconda3/lib/python3.6/config-3.6m-darwin -lpython3.6m -ldl -framework CoreFoundation -Wl,-stack_size,1000000 -framework CoreFoundation
$ ./embedded
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
Current thread 0x000000010f8113c0 (most recent call first):
[1] 32931 abort ./embedded
建议?
答案 0 :(得分:1)
您基本上是在没有Python解释器的情况下尝试将Python本机代码扩展作为独立二进制文件运行。这将永远不会奏效。
Cython扩展代码生成Python解释器的扩展。
它们是只能在正在运行的Python解释器中加载的共享模块。它们不能用作独立的二进制文件。
如果您想制作和分发带有或不带扩展名的Python代码的独立二进制文件,则需要将解释器与代码捆绑在一起 - 请参阅cx_freeze。