V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kahloy
V2EX  ›  C++

想有偿请大佬写一些代码。 Python 调用 Cpp

  •  
  •   kahloy · 2022-02-22 09:27:27 +08:00 · 2979 次点击
    这是一个创建于 765 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为有一些需求需要把一部分 Python 代码上传到服务器上,所以打算做一些简单的加密。

    计划是用 C++重写一部分 Python 里面 numpypandas 的函数,不会特别多,希望能够直接在 Python 里面调用,性能和原有的函数相比不要差太多。

    想先简单询个价,看看有没有老哥愿意接单。

    T G: bXRydXBweA==

    第 1 条附言  ·  2022-02-22 11:01:57 +08:00
    暂时已经有人接下了这个单子,所以不接受新的 offer 了。感谢大家。 - 02.22
    16 条回复    2022-02-23 10:23:37 +08:00
    vincentV2
        1
    vincentV2  
       2022-02-22 09:37:09 +08:00
    a554340466
        2
    a554340466  
       2022-02-22 09:39:39 +08:00
    用 pybind11 性能不止不会差。。还会提升。。
    kahloy
        3
    kahloy  
    OP
       2022-02-22 09:46:23 +08:00
    @vincentV2
    @a554340466
    感谢二位,我去看一下 py2sec ,以前都是自己写这个 setup 感觉很麻烦。。
    如果能提升性能是最好的,这部分只会被调用 1-2 次,我只期待他不要太差就行。
    xylophone21
        4
    xylophone21  
       2022-02-22 10:00:17 +08:00
    @kahloy py2sec 的文档描述,一定程度上实现了“加密”保护源代码的需求。换句话说,这种“加密”可能是非常容易反编译出来的,不过这个方法确实简单。是否满足需求楼主自己判断。

    如果不满足的话,看看这个
    https://numpy.org/doc/stable/reference/c-api/index.html
    kahloy
        5
    kahloy  
    OP
       2022-02-22 10:04:33 +08:00
    @xylophone21 因为我之前就在用 pyd ,所以我对这个东西的安全性是有自己的判断的。

    这也是为什么我想要请大佬帮我直接复制一部分功能,我的 C 还停留在很多年前的 NOIP 水平,已经不足以让我写出现代化的代码了。。。
    xylophone21
        6
    xylophone21  
       2022-02-22 10:09:34 +08:00
    那可能我理解错了,以为你只需要提供 Python 到 C 的桥代码,你应该是希望有人帮你写所以 C 的(包括桥和逻辑)

    我贴的链接是 numpy 的 C API ,也就是说你的 C++代码不需要这一部分的桥,直接调用 numpy for C 就可以了。
    kahloy
        7
    kahloy  
    OP
       2022-02-22 10:26:30 +08:00
    @xylophone21 是的 我希望的就是我传递一个 array 给这个函数,输出的结果和我调用 pandas_func(array)得到一样的结果,并且效率别差太多。
    Huelse
        8
    Huelse  
       2022-02-22 11:30:15 +08:00
    pybind11 值得你学习下
    freemon
        9
    freemon  
       2022-02-22 11:35:19 +08:00
    ctypes 吧,如果只是简单的计算,c/c++的代码刚好可以封装 so 库文件,python 用 ctypes 调用很简单
    tanhui2333
        10
    tanhui2333  
       2022-02-22 12:12:58 +08:00
    可以试试 python + pyo3 + rust 组合
    duke807
        11
    duke807  
       2022-02-22 12:32:33 +08:00
    可以把各別或全部 py 文件編譯成二進制,完全不會有源碼的那種(你可以檢查中間的 c 文件),譬如我一個項目,主 py 腳本編譯成可執行文件,被引用的 py 腳本編譯成 so 文件
    編譯出来的 so 也可以被普通 py 文件 import
    (編譯過的和沒編譯的文件可以任意組合搭配)


    echo "cython main"
    cython --embed -o main.c main.py
    gcc -Os -I /usr/include/python3.8 -o main main.c -lpython3.8 -lpthread -lm -lutil -ldl
    mv main.py main.py_bk

    echo "cython ae_"
    cython --embed -o ae_.c ae_.py
    gcc -Os -I /usr/include/python3.8 -o ae_.so ae_.c -shared -fPIC -lpython3.8 -lpthread -lm -lutil -ldl
    mv ae_.py ae_.py_bk
    linrongbin
        12
    linrongbin  
       2022-02-22 12:34:19 +08:00 via Android
    c++里调用 numpy 和 pandas 有点麻烦啊
    ykk
        13
    ykk  
       2022-02-22 15:19:01 +08:00
    kahloy
        14
    kahloy  
    OP
       2022-02-22 22:47:43 +08:00
    @ykk 买了 感觉还是挺实用的
    ykk
        15
    ykk  
       2022-02-23 09:13:32 +08:00
    @kahloy #14 其实我可以帮你搞定的。。😄
    ruanimal
        16
    ruanimal  
       2022-02-23 10:23:37 +08:00
    用 swig 多好啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1037 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:29 · PVG 06:29 · LAX 15:29 · JFK 18:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.