在 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 使用虚拟环境的正确方法是什么吗?
编辑
让我们举一个具体的例子。我安装了蟒蛇
c:python36
对于我的 c++ 应用程序,我使用以下命令python -m venv c:my_cpp_apppython_venv
创建了一个虚拟环境:
c:my_cpp_apppython_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 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 应该可以促进这一切!
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 枚举环境变量的惯用C++14/C++17方法
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 使用 pybind11 嵌入 python。虚拟环境不起作用
- 在 C++ 应用程序中嵌入 Python 环境
- 如何在C++环境中使用 Tensorflow 库调用 python 文件
- 如何在Ubuntu 16.04上的Anaconda环境中将OpenCV C 代码与Python代码集成在一起
- 将python sklearn模型导出到生产环境(java/c++)
- python脚本能知道C++主函数在Android环境中的返回值吗