【问题标题】:Why Cython extensions on Windows depend on pythonXX.dll but not on MacOSX?为什么 Windows 上的 Cython 扩展依赖于 pythonXX.dll 而不是 MacOSX?
【发布时间】:2015-11-11 23:41:59
【问题描述】:

我在windows和mac上构建了相同的库(下例来自rfoo),mac版本只有系统依赖

$ otool -L marsh.so 
marsh.so:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

在 windows 上它依赖于 python 的 dll

>dumpbin /dependents marsh.pyd
Microsoft (R) COFF/PE Dumper Version 12.00.31101.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file marsh.pyd

File Type: DLL

  Image has the following dependencies:

    python25.dll
    MSVCR120.dll
    KERNEL32.dll

我想知道这是不是真的由于 windows 的实现选择,或者是否有特定于 windows 的东西需要这样做。

上下文:我使用它从 Ableton Live 内的嵌入解释器中加载 python 扩展,该解释器使用旧的 python 版本;但最糟糕的是python没有作为库加载,它是在软件内部静态链接的。在mac上,这不是问题,我仍然可以加载扩展。在 Windows 上,我不能,因为我必须链接到 python25.dll,但是在加载时它会尝试再次初始化解释器,这会给出错误,因为 Ableton Live 不使用 dll。我想知道是否有希望让它在 Windows 上运行。

【问题讨论】:

  • Windows 不会将全局符号汇集到公共命名空间中。模块 (DLL) 必须显式导出和导入符号。嵌入式 Python 是否包含 _ctypes 扩展模块?否则,也许您可​​以使用 RPC 对另一个进程执行某些操作。
  • 谢谢,这就是原因。我考虑过 ctypes 但它也带有一个 dll (更确切地说是一个 pyd ),并且它已被剥离。长话短说,我最关键的功能依赖于 zeromq,如果我想要可移植性,它似乎不再是一个选择(有一个“纯 python”替代方案,但它最终依赖于作为二进制文件的 pywin32)。我在他们的测试版网站上提出了一个问题,但我没有太大希望。我目前正在使用 asyncore 重新实现网络部分,虽然不是很好但可用且可行。

标签: python windows macos dll cython


【解决方案1】:

OS X 上有 DLL,与 Windows 不同,大多数 OS X 应用程序都是静态链接的,更大但外部依赖更少。

【讨论】:

  • 其实第一条评论是正确的答案。不会判断陈述的真假,只是无关。
猜你喜欢
  • 2010-10-02
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 2021-02-24
  • 2018-07-29
相关资源
最近更新 更多