标签: cppyy

是否有*任何*解决方案来打包使用cppyy的python应用程序?

创建 python 桌面应用程序的跨平台运行时,我不是新手。我主要使用 pyinstaller、cxfreeze、有时是 fbs、有时是公文包为我的本科生创建了各种工具。任何定期执行此操作的人都知道,在使用任意 Python 模块集合时,针对 Linux、windows 和 macos 需要进行很多怪癖和调整,但到目前为止,我已经设法弄清楚了一切。

我有一个 python GUI 应用程序,它使用一个巨大且不断变化的 c++ 库,所以我不能只是用 python 重写它。我已经成功地编写了使用 c++ 库的 python 代码,使用了名为 cppyy 的惊人(并且可能是神奇的)库,它允许您毫不费力地从 python 运行 c++ 代码。一切都在 Linux、Mac 和 Windows 上运行良好,但我无法将其打包到运行时中,而且我已经尝试了上述所有系统。所有这些都没有问题产生运行时(即,没有错误),但是当您运行它们时它们会失败。本质上,它们都给出了关于无法找到 cppyy-backend 的某种错误(例如,使用 pyinstaller 的 pyinstaller 和 fbs 在您运行二进制文件时会给出此消息):

/home/nogard/Desktop/cppyytest/target/MyApp/cppyy_backend/loader.py:113: UserWarning: No precompiled header available ([Errno 2] No such file or directory: '/home/nogard/Desktop/cppyytest/target/MyApp/cppyy_backend'); this may impact performance.
Traceback (most recent call last):
  File "main.py", line 5, in <module>
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", …
Run Code Online (Sandbox Code Playgroud)

python packaging pyinstaller cppyy

7
推荐指数
1
解决办法
421
查看次数

如何为 C++ 库实现 Python 接口

为 C++ 库创建 Python 接口的最佳/标准方法是什么?

我知道这个问题以前曾在这里问过,但那是在 2008 年,从那时起事情可能/可能已经发生了变化。

我环顾四周并测试了几种不同的方法,但无法决定哪种方法最好。到目前为止,我已经尝试过 Swig、ctypes 和 cppyy,并认为 cppyy 是迄今为止最容易/最快实现的。我已经看到了 Swig 的建议,但是 Swig 花了很长时间才开始工作,而且结果并不令人印象深刻。有现行标准吗?为什么人们如此推荐 Swig,而我却听不到 cppyy 的任何消息?谢谢你。

c++ python swig ctypes cppyy

6
推荐指数
1
解决办法
1051
查看次数

cppyy 和 std::is_same_v (C++17)

如果我在 Ubuntu 20.04 系统上的 cppyy v1.6.2 中运行以下测试脚本:

#!/usr/bin/python3

import cppyy

cppyy.cppdef("""
struct Test { 
 void test() const {
  std::cout << std::is_same<int,double>::value << std::endl; // works
  std::cout << std::is_same_v<int,double> << std::endl;      // doesn't work
 } 
};
""");

tt = cppyy.gbl.Test()
tt.test()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

input_line_21:5:21: error: no member named 'is_same_v' in namespace 'std'
  std::cout << std::is_same_v<int,double> << std::endl;      // doesn't work
               ~~~~~^
input_line_21:5:34: error: expected '(' for function-style cast or type construction
  std::cout << std::is_same_v<int,double> << std::endl;      // doesn't work
                              ~~~^
Traceback (most …
Run Code Online (Sandbox Code Playgroud)

c++ cppyy

2
推荐指数
1
解决办法
674
查看次数

标签 统计

cppyy ×3

c++ ×2

python ×2

ctypes ×1

packaging ×1

pyinstaller ×1

swig ×1