【发布时间】:2019-06-26 17:26:32
【问题描述】:
我尝试使用 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\ in 创建了一个虚拟环境:
c:\my_cpp_app\python_venv\
使用 c-python api 我想让我的 cpp 应用程序使用位于 python_venv 的虚拟环境,而不是 c:\python36\
【问题讨论】:
-
我假设“另一个虚拟环境”是指一些特殊的
PYTHONHOME/PYTHONPATH(docs.python.org/3/using/cmdline.html#envvar-PYTHONHOME) 而不是完全不同的 Python 版本(只能在编译时选择),在在这种情况下,您必须在调用生成的 exe 之前设置它们。或者使用Py_SetPath(docs.python.org/3/c-api/init.html#c.Py_SetPath) /Py_SetPythonHome(docs.python.org/3/c-api/init.html#c.Py_SetPythonHome) 在exe中设置它。目前尚不清楚您想做什么以及您的确切问题是什么。 -
感谢答案,我更新了问题以添加示例。希望它会更清楚......我也在 bug python bug tracker bugs.python.org/issue22213 中发现了这个问题,我认为这是同一个问题。
-
鉴于错误报告中的描述,这是一个尚未解决的问题(并且仅针对 linux 提出了解决方法)。我不知道你用嵌入的 Python 做什么,但可能只是在解释器初始化后设置正确的 python-path 就足够了。
-
使用 virtualenv 而不是 venv 创建环境并使用
Py_SetPythome工作正常。看起来 pep 提案是在 3.8 中实施的。谢谢你的帮助
标签: python c++ python-3.x python-3.6 cpython