Mac上的python嵌入ModuleNotFoundError:没有名为'编码的模块'

时间:2017-09-28 16:36:53

标签: python c macos embed cython

我目前无法使用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

建议?

1 个答案:

答案 0 :(得分:1)

您基本上是在没有Python解释器的情况下尝试将Python本机代码扩展作为独立二进制文件运行。这将永远不会奏效。

Cython扩展代码生成Python解释器的扩展。

它们是只能在正在运行的Python解释器中加载的共享模块。它们不能用作独立的二进制文件。

如果您想制作和分发带有或不带扩展名的Python代码的独立二进制文件,则需要将解释器与代码捆绑在一起 - 请参阅cx_freeze