繁体   English   中英

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

[英]embed python environment in c++ application

使用 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\\

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

我设法使它工作使用virtualenv代替,并通过调用Py_SetPythonHome之前Py_Initialize 查看有关python启动顺序的更多详细信息

定位 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文件。

PREFIXEXEC_PREFIX的构建时间设置也是相关的,Windows 上的一些注册表设置也是相关的。 硬编码回退基于 CPython 源代码树的布局,并在源代码检出时构建输出。

在更高版本中实现pep 587应该会促进这一切!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM