我大量使用 virtualenv 将我的开发环境与系统范围的 Python 安装隔离开来。使用 virtualenv 的典型工作流程包括运行
source /path/to/virtualenv/bin/activate设置 Python 执行隔离运行时所需的环境变量。确保我的 Python 可执行文件使用当前事件的 virtualenv 就像将 shebang 设置为
#!/usr/bin/env python一样简单
不过,最近我一直在编写一些嵌入 Python 运行时的 C 代码。我似乎无法弄清楚的是如何让嵌入式运行时使用当前事件的 virtualenv。有人有一个很好的例子可以分享吗?
最佳答案
检查路径和设置 Py_SetProgramName 对我有用:
std::vector<std::string> paths;
std::string pathEnv = getenv("PATH");
boost::split(paths, pathEnv, boost::is_any_of(";:"));
for (std::string path : paths)
{
boost::filesystem::path pythonPath = boost::filesystem::path(path) / "python";
std::cout << pythonPath << std::endl;
if (boost::filesystem::exists(pythonPath))
{
pythonProgramName_ = pythonPath.string(); // remember path, because Py_SetProgramName doesn't save it anywhere
Py_SetProgramName(&pythonProgramName_[0]);
break;
}
}
Py_Initialize();
关于python - 获取嵌入式 Python 运行时以使用当前事件的 virtualenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7492855/