V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
yoyoluck
V2EX  ›  Python

pybind11 链接 py 库版本的问题

  •  
  •   yoyoluck · 2023-06-08 00:50:00 +08:00 · 1372 次点击
    这是一个创建于 559 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教大家一个 pybind11 的问题 我在 c++代码中通过 pybind11 调用 py 脚本,在编译 c++程序的时候链接了指定版本的 python 库( python3.10 ),将 c++程序放到其他 windows 电脑上(已经安装了其他版本的 py,如 3.8 )运行时会提示找不到 python310.dll 。 这个问题如何解决,难道必须在客户机上也要安装相同版本的 python? 客户机可能其他软件以来 3.8 , 更新到其他版本可能导致其他软件运行不了。

    11 条回复    2023-06-08 10:46:14 +08:00
    litanid
        1
    litanid  
       2023-06-08 01:14:20 +08:00
    这里可以写字
    yuikns
        2
    yuikns  
       2023-06-08 04:29:28 +08:00
    是这样的。

    你可以静态编译或者把依赖的 dll 打包一起 release
    ysc3839
        3
    ysc3839  
       2023-06-08 04:42:24 +08:00 via Android
    必须安装同版本 Python
    billccn
        4
    billccn  
       2023-06-08 06:03:10 +08:00
    Python 3 有一个稳定 API(stable API),但是有一些限制,而且可能会有一些性能损失,Pybind11 也没有明确支持它,不过好像是可以用的。
    justou
        5
    justou  
       2023-06-08 08:51:03 +08:00
    windows 下有个 embed 版本的 python, 比如 https://www.python.org/ftp/python/3.10.11/python-3.10.11-embed-amd64.zip 可以把它看成一个绿色版 python(可以用 pip 在这个环境中安装管理第三方库), 相当于把 python 当成动态链接库来用, 可以随你的程序一起发布
    neoblackcap
        6
    neoblackcap  
       2023-06-08 09:08:19 +08:00
    相同版本是必须的,这是两个东西。嵌入一个 python 呗,好比 sublime text 都是这样做。以前很多人用 boost.python 也这样搞
    yoyoluck
        7
    yoyoluck  
    OP
       2023-06-08 09:09:33 +08:00
    @billccn 感谢, 我试了下, cpython 有宏定义 Py_LIMITED_API, 如果我在项目中加了这个定义会导致 pybind11 报错, 感觉好像用不了, 晚点我再研究下
    yoyoluck
        8
    yoyoluck  
    OP
       2023-06-08 09:11:02 +08:00
    @justou @neoblackcap 感谢, 这应该是个办法, 晚点我试一下.
    smirkcat
        9
    smirkcat  
       2023-06-08 09:42:57 +08:00
    换个思路编译低版本,比如最低 python3.8 ,要求客户必须用 3.8 以上,正常来说,高版本可以用低版本 so
    ysc3839
        10
    ysc3839  
       2023-06-08 10:01:44 +08:00 via Android
    @yoyoluck 说明 pybind11 不支持 Py_LIMITED_API ,这种情况你只能手动调用 Python 的 C API
    penguinWWY
        11
    penguinWWY  
       2023-06-08 10:46:14 +08:00
    需要分发到别的机器的最好静态链接
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5844 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:00 · PVG 10:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.