【发布时间】: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