在c++中嵌入python:选择python版本

2023-12-23

我已经寻找问题的答案很长一段时间了,但我找到的答案似乎都不能解决我的问题。

我正在尝试使用 Python 提供的功能(Python.h、Py_xxx 函数等)将 Python 嵌入到我的 C++ 代码中。但是,我在让我的 C++ 程序调用正确的 Python 解释器时遇到了麻烦。事实上,我的机器上存在多个解释器(顺便说一下,这是一台运行 OSX 10.7.5 的 Mac)。我在操作系统中预装了默认版本的 Python(2.7.1 版),并且还安装了 anaconda 的另一个版本(2.7.7 版)。我需要使用 anaconda 安装的版本,因为我需要 anaconda 提供的额外库,而 OSX 的 Python 默认情况下未安装这些库。

我的C++代码如下:

char* python_home_ = (char*) "/anaconda";
char* program_name_ = (char*) "/anaconda/bin/python2.7";

Py_SetPythonHome(python_home_);
Py_SetProgramName(program_name_);

Py_Initialize();

printf("python home: %s\n", Py_GetPythonHome());
printf("program name: %s\n", Py_GetProgramName());
printf("get path: %s\n", Py_GetPath());
printf("get prefix: %s\n", Py_GetPrefix());
printf("get exec prefix: %s\n", Py_GetExecPrefix());
printf("get prog full path: %s\n", Py_GetProgramFullPath());

PyRun_SimpleString("import sys");
printf("path: ");
PyRun_SimpleString("print sys.path");
printf("version: ");
PyRun_SimpleString("print sys.version");

结果:

python home: /anaconda
program name: /anaconda/bin/python2.7
get path: /anaconda/lib/python27.zip:/anaconda/lib/python2.7/:/anaconda/lib/python2.7/plat-darwin:/anaconda/lib/python2.7/plat-mac:/anaconda/lib/python2.7/plat-mac/lib-scriptpackages:/anaconda/lib/python2.7/../../Extras/lib/python:/anaconda/lib/python2.7/lib-tk:/anaconda/lib/python2.7/lib-old:/anaconda/lib/python2.7/lib-dynload
get prefix: /anaconda
get exec prefix: /anaconda
get prog full path: /anaconda/bin/python2.7
path: ['/anaconda/lib/python2.7/site-packages/sphinxcontrib_googleanalytics-0.1dev_20140616-py2.7.egg', '/anaconda/lib/python27.zip', '/anaconda/lib/python2.7', '/anaconda/lib/python2.7/plat-darwin', '/anaconda/lib/python2.7/plat-mac', '/anaconda/lib/python2.7/plat-mac/lib-scriptpackages', '/anaconda/Extras/lib/python', '/anaconda/lib/python2.7/lib-tk', '/anaconda/lib/python2.7/lib-old', '/anaconda/lib/python2.7/lib-dynload', '/anaconda/lib/python2.7/site-packages', '/anaconda/lib/python2.7/site-packages/PIL', '/anaconda/lib/python2.7/site-packages/setuptools-2.2-py2.7.egg']
version: 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]

但是,当我在终端中运行 anaconda 的 python 时,这就是我得到的结果

Alexs-MacBook-Pro:lib alex$ /anaconda/bin/python2.7
Python 2.7.7 |Anaconda 1.9.1 (x86_64)| (default, Jun  2 2014, 12:48:16) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org

以及默认 python 的结果

Alexs-MacBook-Pro:lib alex$ /usr/bin/python
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

所以看来,即使我为可执行文件指定了另一个路径,OSX 的默认 python 也会被调用(并且与我稍后尝试导入的 anaconda 库冲突)。

我的问题很简单:我做错了什么以及为什么我通过 Py_Setxxx 指定的路径没有指向正确的可执行文件?

非常感谢您的帮助!

Alex


我也遇到过同样的问题。我的解决方案是像这样调用程序:

DYLD_LIBRARY_PATH=/path_to_anaconda/lib ./program

这是因为运行时使用的共享库是从错误的原始 OSX 目录加载的。 (Linux 中的 LD_LIBRARY_PATH)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在c++中嵌入python:选择python版本 的相关文章

  • 返回带有列表对象的列表对象

    我有三个表 汽车品牌 汽车型号 和 CarsandModel 我有 Carsand 模型表 因为一个模型可以由多个制造商构建 我想返回包含汽车型号列表的汽车品牌列表 我现在的长篇大论不是过滤汽车型号的汽车制造商列表 我尝试添加一个 wher
  • 通过指向基址的指针删除对象而不使用虚拟析构函数

    我有代码 class A1 public A1 cout lt lt A1 virtual A1 cout lt lt A1 class A2 public A2 cout lt lt A2 A2 cout lt lt A2 class B
  • 表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 错误

    此错误发生在运行时 我不确定是什么原因导致的 代码对我来说看起来是正确的 include
  • 清理 STL 指针列表/向量

    您可以想出的最短的 C 块是多少来安全地清理std vector or std list指针 假设您必须对指针调用删除 list
  • 如何使用 Unity 动态注册通用类?

    我有一个包含很多类 300 和 BaseClass 的程序集 我想用接口注册一个泛型类 统一后 您必须在 Name如果你想解析接口的对象数组 我想要一个对象数组主视图模型自动地 有没有办法通过反射来自动执行此操作 有什么建议么 示例 伪 p
  • 是否可以将 CMFCToolBar 添加到对话框中?

    我刚刚尝试了将 CToolbar 添加到新 CMFCToolBar 上的对话框的标准方法 但这不起作用 在我深入研究新的实现之前 我想知道它是否真的可行 我不确定你所说的 标准方式 是什么意思 但你当然可以以编程方式做到这一点 In MyD
  • 如何在提升日期时间中忽略周末和节假日?

    第一个问题 我有一个提升日期对象 如下所示 boost gregorian date 今天 2012 02 13 我从今天减去日期部分 如下所示 今天 月 240 或今天 天 X 等 我想在进行上述减法时是否有办法排除周末和特殊假期 我的意
  • 如何防止打印屏幕

    我有一个要求 我正在开发的应用程序阻止用户轻松捕获屏幕内容 我已经表示 没有可行的方法可以完全防止这种情况发生 但我正在寻找方法来为这一过程引入一些障碍 我正在使用 C NET 2 0 和 WinForms 你不能 您能做的最好的事情就是在
  • 如何用C语言创建字典?

    我正在用 C 语言编写一个微控制器 作为它的一部分 我想在 7 段显示器上显示某些字母 每个字母都有一个对应的数字 使 7 段显示屏显示该字母 它没有真正的模式 因为数字只是通过将显示字母所需的 7 段显示器上的位相加而成 因此如果我可以创
  • 将 boost::iostreams::mapped_file_source 与 std::multimap 一起使用

    我有相当大量的数据需要分析 每个文件大约有 5gig 每个文件的格式如下 xxxxx yyyyy 键和值都可以重复 但键是按升序排列的 我正在尝试使用内存映射文件来实现此目的 然后找到所需的键并使用它们 这是我写的 if data file
  • 确定所选电子邮件是来自收件箱还是已发送邮件

    我正在编程Outlook 插件并需要确定所选电子邮件是否来自Inbox or Sent Items这样当我将电子邮件保存到数据库中时 我可以使用文件夹 收件箱 或 已发送 来标记电子邮件 我知道我可以将文件夹名称与 收件箱 或 已发送邮件
  • 传输数据的 Symbol.WPAN.Bluetooth 示例

    我正在尝试将 EMDK 附带的 Symbol WPAN Bluetooth 用于 Symbol 设备 有人碰巧有一个传输数据的工作示例吗 Symbol 的示例只是将设备配对 他们显然认为在个人局域网示例中并不真正需要传输数据 不管怎样 我知
  • 寻找自定义 SynchronizationContext 的示例(单元测试所需)

    我需要定制同步上下文 http msdn microsoft com en us library system threading synchronizationcontext aspx that 拥有一个运行 Posts 和 Sends
  • MonoMac 窗口关闭时没有错误

    我刚刚开始在 Xamarin Studio 中使用 MonoMac 并且遇到了最奇怪的问题 我有一个带有 NSButton 和 NSTextField 的窗口 至此 我已经删除了按钮上的事件处理程序 因此它不会执行任何操作 除了在单击它时突
  • 如何收集和存储tellp()、tellg()返回类型?

    我正在编写一个在文件中维护 linked list 的程序 因此 我通过使用tellp tellg 遍历文件并将其添加到特定的长整数 可以视为偏移量 以到达新位置 一个简单的例子是 long next offset sizeof long
  • Windows 中的蓝牙 AVRCP 命令会触发哪些事件

    可以这么说 只是在做一些高级侦察 对于我的潘多拉客户 Elpis http elpis adamhaile net 我支持全局媒体键 键盘上的 MediaPlayPause MediaNext 等 并且我希望能够支持AVRCP http e
  • 隐藏 MediaPlayer 控件(Microsoft 媒体平台播放器框架)

    我在 c xaml 应用程序中使用 MMP PF 提供我自己的控制元素来处理播放器 这就是为什么我想隐藏 禁用出现在底部的本机控件 在屏幕截图的屏幕中间 这只是使用了一个主题 有人知道该怎么做吗 我没能找到合适的房产 像这样使用 axWin
  • 我的 Visual Studio 2008 模板有什么问题?

    我正在尝试为 Visual Studio 创建自己的类模板 称为 公共类 我跟着有关如何手动创建项目模板的官方 MSDN 说明 http msdn microsoft com en us library ms247113 aspx几乎一字不
  • 如何将curlpp 添加到我的项目中?

    我正在尝试从 vb net 过渡到 C 但我陷入了困境 我从下载了curpp这给了我一个 dll exp 和 lib 文件 我将包含这 3 个文件的目录添加到项目属性中的 附加库目录 链接器 gt 常规 接下来 我将 ws2 32 lib
  • 复杂对象上的 GroupBy(例如 List

    Using GroupBy and Count gt 1我试图在列表中查找我的类的重复实例 该类看起来像这样 public class SampleObject public string Id public IEnumerable

随机推荐

  • 检测vb.net中文本的宽度

    有没有办法检测 vb net Web 应用程序中文本的实际宽度 它需要依赖于它的字体样式和大小 在 vb6 中 您可以将文本复制到标签中并使其扩展以适合然后测量其宽度 但这在 vb net 中不起作用 Update 经进一步检查 TextR
  • 为什么这段代码显示答案为 6? [复制]

    这个问题在这里已经有答案了 我的一个同学问了这个问题 我想确定我告诉他的是正确的答案 本质上 下面的代码 确实显示 6 作为答案 在到达 MessageBox Show i ToString 时让他感到困惑 我的解释是递减操作 i 实际上并
  • E0701 OOZIE 工作流程中的 XML 架构错误

    以下是我的workflow xml
  • 有角。使用 APP_INITIALIZER 时路由器 DI 不工作

    我正在从服务器预加载应用程序配置APP INITIALIZER通过以下方式 AppModule providers ConfigService provide APP INITIALIZER useFactory configService
  • CSS 动画旋转3d 在 Safari 中不起作用

    无论我如何尝试 我都无法让该动画在 Safari 12 中正常工作 我已经尝试过供应商前缀等 但没有任何效果 它在 Chrome 中运行良好 有人有主意吗 div class spinners div 这是CSS keyframes spi
  • 使用 Flask/blueprint 制作一些静态页面

    所以我对如何使用 Flask 构建页面而不必声明每个视图有点困惑 我如何制作一个可以在我想要加载的页面上拾取的蓝图 说这些是我的示例页面 templates layout html section1 subsection index htm
  • 在 WPF 和 Silverlight 中实现 INotifyProperty 对静态属性的更改

    问题是如何实施INotifyPropertyChanged在静态属性上 因为您实现的事件不是静态的 并且不能由静态属性调用 此外 您无法绑定到 Silverlight 中的静态属性 我已经看到这个问题出现在一些论坛上 并提供了各种解决方案
  • 防止内容扩展网格项

    TL DR 有没有类似的东西table layout fixedCSS 网格 我尝试创建一个年视图日历 其中包含月份的大 4x3 网格 以及用于日期的嵌套 7x6 网格 日历应填满页面 因此年份网格容器的宽度和高度均为 100 year g
  • 无法将包含字符串的对象写入文件

    我正在用 C 开发一个电话簿项目 我创建了一个类 里面有字符串对象来存储一些字符串 我的程序无法将字符串数据写入文件 这让我很困扰 它只显示最后插入的数据 这是示例程序 给出了我想要做什么以及问题出在哪里的基本想法 include
  • 如何在 glmer 中获取随机效应的 p 值

    我想根据行动和国家层面的特征 使用 glmer 来分析抗议的主张何时针对国家 因此 我想获得固定效应和随机效应的 p 值 我的模型如下所示 targets lt glmer state ENV HLH HRI LAB SMO Capital
  • 如何验证 HTML 是否符合 W3C 标准

    我有一个使用以下命令生成 HTML 页面的项目Velocity https en wikipedia org wiki Apache Velocity模板和Java 但大部分页面不符合W3C http en wikipedia org wi
  • ng2-charts 访问基础图表对象

    我在用着ng2 图表 http valor software com ng2 charts 在我的 ionic 2 项目中绘制折线图 我需要访问 chartClick 事件中的图表数据点集合 为此 我需要访问图表的基本 Chart js 对
  • Android 搜索栏,带有自定义拇指,其中包含动态文本

    我想创建 android 自定义SeekBar having 带有文字的拇指在其中显示当前的搜索位置 这是我的代码 SeekBar sb Override public void onCreate Bundle savedInstanceS
  • 在对话框流中创建谷歌助手应用程序时,如何在谷歌操作中创建建议输入?

    我想在谷歌助手应用程序中做出响应时提示允许用户进行选择 我正在对话流中创建它 我该怎么做呢 如果您想将 建议输入 项目添加到您的对话体验中 就像它们在模拟器或屏幕设备上显示的那样 那么您正在谈论 建议筹码 https developers
  • C# - 将项目从列表视图拖到垃圾桶中?

    如何将一个项目从 Winforms listview 控件拖到另一个控件 垃圾桶的图片 上 UPDATE1 我认为基本流程是 对于列表视图上的 ItemDrag 事件 有一个 DoDragDrop 然后在图片框上有一个 DragEnter
  • SQL ORDER 字符数字

    我有一列存储为字符的数字 当我对此列执行 ORDER BY 时 我得到以下信息 100 131 200 21 30 31000 etc 如何对这些字符进行数字排序 我是否需要转换某些内容 或者是否已经有用于此目的的 SQL 命令或函数 谢谢
  • JSON::XS“用法”呱呱叫

    我似乎无法使用JSON XS的OO接口正常 以下是我无法追踪到的错误 use JSON XS my array foo bar my coder JSON XS gt new gt utf8 gt pretty print coder gt
  • 在 MATLAB 中从信号中提取 EEG 分量

    我在 MATLAB 中有一个简单的 EEG 信号 如下图所示 我想要的是根据下表提取脑电图的成分 Delta 高达 4 Hz 西塔 4 gt 8 Hz 阿尔法 8 gt 13 Hz 贝塔 13 gt 30 Hz 伽玛 30 gt 100 H
  • C#:向二进制文件写入和读取列表

    我写了一个程序 有一个User类 保存到文件中以存储用户信息 但是 可能有多个不同的用户 因此不是将文件保存为单个用户 而是将文件保存为用户列表 这是在 XNA 中 因此是一个游戏 但这实际上不会对事情产生任何影响 用户拥有硬币 皮肤 库存
  • 在c++中嵌入python:选择python版本

    我已经寻找问题的答案很长一段时间了 但我找到的答案似乎都不能解决我的问题 我正在尝试使用 Python 提供的功能 Python h Py xxx 函数等 将 Python 嵌入到我的 C 代码中 但是 我在让我的 C 程序调用正确的 Py