是否可以在运行时修改PYTHONPATH?

Skr*_*sli 9 c++ python python-embedding python-c-api boost-python

我有一个动态链接到Python解释器的C++应用程序.我希望能够从特定目录导入python模块.我想修改我的进程的PYTHONPATH,以便sys.path将包含我添加到PYTHONPATH的路径.根据这个文档,这似乎是它的工作方式:

http://docs.python.org/c-api/intro.html#embedding-python

但是,当我从Python-land打印sys.path时,它具有PYTHONPATH的原始内容而不是我设置的内容.这是我正在做的一个例子(使用Boost.Python):

int main(int argc, char* argv[])
{
  _putenv_s("PYTHONPATH", "C:\\source\\\\modules");
  Py_Initialize();
  object main = import("__main__");
  object global = (main.attr("__dict__"));
  exec("import sys\nprint sys.path"), global, global);
}
Run Code Online (Sandbox Code Playgroud)

PS - 我知道还有其他方法可以实现我的目标,但这不是我所要求的.我想知道为什么Py_Initialize()在设置sys.path时不使用PYTHONPATH的当前值.或许我误解了它应该如何运作?

Dew*_*wfy 7

我找到了跨平台的解决方案.在调用任何其他python代码之前,只需执行以下python行:

import sys
sys.path.append("C:\\source\\\\modules")
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说非常合适!在boost :: python中,只需要import("sys").attr("path").attr("append")("path/to/files") (4认同)