Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c+中嵌入python环境+;应用 使用C-python API,我尝试将Python 3.6嵌入到C++应用程序中。 但是,我希望使用虚拟环境,而不是使用系统安装。 我没有找到任何关于如何做的文档。 一些相关文件提到 py_SetProgramName_Python_C++_Python 3.x_Python 3.6_Cpython - Fatal编程技术网

在c+中嵌入python环境+;应用 使用C-python API,我尝试将Python 3.6嵌入到C++应用程序中。 但是,我希望使用虚拟环境,而不是使用系统安装。 我没有找到任何关于如何做的文档。 一些相关文件提到 py_SetProgramName

在c+中嵌入python环境+;应用 使用C-python API,我尝试将Python 3.6嵌入到C++应用程序中。 但是,我希望使用虚拟环境,而不是使用系统安装。 我没有找到任何关于如何做的文档。 一些相关文件提到 py_SetProgramName,python,c++,python-3.x,python-3.6,cpython,Python,C++,Python 3.x,Python 3.6,Cpython,或 另外,在阅读c-python代码时,我可以看到pvenv.cfg或文件的使用,但这些解决方案似乎都不起作用 知道什么是使用c api虚拟环境的正确方法吗 编辑 让我们举一个具体的例子。我已经在中安装了python c:\python36 我在C++应用程序中使用命令 python -m vavc::yMycppppAP\python vave\/c> >创建了一个虚拟En: c:\my_cpp_app\python_venv\ 使用c-python api,我想让我的cpp应用程序使用位

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

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

编辑

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

c:\python36

我在C++应用程序中使用命令<代码> python -m vavc::yMycppppAP\python vave\/c> >创建了一个虚拟En:

c:\my_cpp_app\python_venv\

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

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

我使用了
virtualenv
并通过调用
Py\u SetPythonHome
prior
Py\u Initialize
使它工作起来。 请参阅有关的更多详细信息

查找Python和标准库

Python的位置 二进制和标准库受几个因素的影响。这个 用于执行计算的算法在任何地方都没有记录 而不是在源代码中。即使是这样的描述也是错误的 不完整,因为无法为虚拟环境更新 在Python3.3中添加了支持(详见PEP 405)

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

  • Py\u SetPythonHome()
  • Py\u SetProgramName()
  • PYTHONHOME
还将检查文件系统是否存在错误 pyvenv.cfg文件(参见PEP 405)或,如果没有,则为
lib/os.py
(Windows) 或者
lib/python$VERSION/os.py
文件

前缀的生成时间设置
和
EXEC_PREFIX
也是相关的,上的一些注册表设置也是相关的 窗户。硬编码的后备方案基于 在源代码中工作时,CPython源代码树和生成输出 结帐


在更高版本中的实现将促进所有这一切

我假设“另一个虚拟环境”是指一些特殊的
PYTHONHOME
/
PYTHONPATH
(),而不是完全不同的Python版本(只能在编译时选择),在这种情况下,您必须在调用生成的exe之前设置它们。或者使用
Py_SetPath
()/
Py_SetPythonHome
()在exe中设置它。现在还不清楚你想做什么,你的确切问题是什么。thx为了回答这个问题,我更新了这个问题,添加了一个例子。希望它会更清楚。。。另外,我在bug python bug tracker中发现了这个问题,我认为这是同一个问题。如果bug报告中有描述,您可以尝试使用它,这是一个尚未解决的问题(并且建议的解决方法仅适用于linux)。我不知道如何处理嵌入的Python,但可能在解释器初始化后设置正确的Python路径就足够了。使用virtualenv而不是venv创建环境并使用
Py_SetPythome
效果很好。看来政治公众人物的建议是在3.8中实施的。谢谢你的帮助
c:\my_cpp_app\python_venv\