[英]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
文件。
PREFIX
和EXEC_PREFIX
的构建时间设置也是相关的,Windows 上的一些注册表设置也是相关的。 硬编码回退基于 CPython 源代码树的布局,并在源代码检出时构建输出。
在更高版本中实现pep 587应该会促进这一切!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.