embeddedPython3没有标准库
编辑:我在这里问了一个相反的问题: 如何embeddedPython3与标准库
这里提供了一个Python2的解决scheme: 是否可以在没有标准库的情况下embeddedpython?
但是,Python3在Py_Initialize();
上失败Py_Initialize();
有:
Fatal Python error: Py_Initialize: unable to load the file system codec ImportError: No module named 'encodings'
这是有道理的,因为py3源文件默认是utf-8。 所以它似乎只需要一个外部的二进制文件来parsingpy3源文件。
那么该怎么办?
它看起来好像我需要在我的系统Python安装中findencodings
二进制文件,将其复制到我的项目树中,并设置一些环境variablesPYTHONPATH(?)以便我的libpython.dylib可以find它。
是否有可能避免这种情况? 如果没有,任何人都可以澄清我需要采取的步骤? 会不会有更多的打嗝?
注:对于后代,这是我得到一个独立的libpython.dylib链接到我的项目在OSX上:
首先我find我的系统Python的库: /usr/local/Frameworks/Python.framework/Versions/3.4/Python
(在我的情况下,它是用自制软件安装的)。
现在我:
-
将.dylib复制到我的项目文件夹中创build
./Libs/libpython3.4.1_OSX.dylib
-
进入生成
build settings -> linking
并将other linker flags
设置为-lpython3.4.1_OSX
在这一点上,它似乎工作。 但是,如果您知道尝试在新的OSX安装上构build它,它将会失败。 这是因为:
$ otool -D ./libpython3.4.1_OSX.dylib ./libpython3.4.1_OSX.dylib: /usr/local/Frameworks/Python.framework/Versions/3.4/Python
.dylib仍然保留在旧的位置。 .dylib包含一个指向它的位置的链接真的很奇怪,因为使用它的任何东西都必须知道它在哪里以便首先调用它。
我们可以纠正这个:
$ install_name_tool -id @rpath/libpython3.4.1_OSX.dylib libpython3.4.1_OSX.dylib
但是在我们的Xcode项目中,我们也必须:
- 进入
build phases
。 添加一个copy files
步骤,将libpython3.4.1_OSX.dylib
拷贝到Frameworks
(这是放置它的正确位置)。 - 进入生成
build settings -> linking
并将runpath search paths
设置为@executable_path/../Frameworks/libpython3.4.1_OSX.dylib
最后,我需要进入edit scheme -> run -> arguments -> environment variables
并添加价值的../Frameworks
我怀疑为了得到这个工作,我还需要添加一个PYTHONPATH
链接:
https://mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html
http://qin.laya.com/tech_coding_help/dylib_linking.html
https://github.com/conda/conda-build/issues/279#issuecomment-67241554
你能帮我理解Mach-O函数库如何在Mac OS X中工作吗?
http://nshipster.com/launch-arguments-and-environment-variables/
我已经尝试了这个,并且需要花费更多的时间来embeddedPython 3而不使用Python库。
Python 3中的一些模块是运行Python 3所必需的,如果没有它们,它将需要很多修改才能运行。