在C ++应用程序中嵌入python环境

时间:2019-06-26 17:26:32

标签: python c++ python-3.x python-3.6 cpython

我使用c-python api将python 3.6嵌入到c ++应用程序中。 但是,我不想使用系统安装,而是想使用虚拟环境。 在执行此操作的方法上,我没有找到任何文档。 一些相关文档提到

py_SetProgramName

py_SetPythonHome

另外,在阅读c-python代码时,我可以看到pvenv.cfg._pth文件的使用,但是这些解决方案似乎都不起作用。

您知道从c api使用虚拟环境的正确方法是什么吗?

编辑

让我们举一个具体的例子。我在其中安装了python

c:\python36

对于我的C ++应用程序,我使用以下命令python -m venv c:\my_cpp_app\python_venv\创建了一个虚拟环境:

c:\my_cpp_app\python_venv\

使用c-python api,我想使我的cpp应用程序使用位于python_venv中的虚拟环境,而不是c:\python36\

1 个答案:

答案 0 :(得分:1)

如评论中所述,嵌入式python 3.6和使用venv创建的虚拟环境似乎不兼容(bugs.python.org/issue22213

我设法改用virtualenv并通过在Py_SetPythonHome之前调用Py_Initialize使其起作用。 在python startup sequence

上查看更多详细信息
  

找到Python和标准库

     

Python的位置   二进制文件和标准库受几个因素影响。的   用于执行计算的算法未记录在任何地方   而不是源代码中的。即使是描述   不完整,因为无法为虚拟环境更新   在Python 3.3中添加了支持(在PEP 405中有详细说明)。

     

这些计算   受以下函数调用(在调用之前进行)的影响   Py_Initialize())和环境变量:

     
      
  • Py_SetPythonHome()
  •   
  • Py_SetProgramName()
  •   
  • PYTHONHOME
  •   
     

还要检查文件系统是否存在   pyvenv.cfg文件(请参阅PEP 405),否则,则为lib/os.py(Windows)   或lib/python$VERSION/os.py文件。

     

PREFIX的构建时间设置   和EXEC_PREFIX也相关,因为   视窗。硬编码的后备广告基于广告代码的布局   CPython源代码树并在源代码中工作时生成输出   结帐。

在以后的版本中实施pep 587应该会很方便!