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所必需的,如果没有它们,它将需要很多修改才能运行。