2

平台:Windows 7 假设两者都是 32 位版本。

我目前的理解是这是不可能的,因为两个安装过程都涉及替换 python.exe 本身。

我想每个来源都必须合并才能从两者中获得功能?

无堆栈 Python:http: //zope.stackless.com/

用于 .NET 的 Python:http: //pythonnet.github.io/

我们在 IronPython 上使用 Python for .NET,因为我们想要访问所有的 cpython 库(例如 matplotlib 等)。

4

3 回答 3

2

正如您所说 - 不,这是不可能的:“合并两个项目的来源”也将是一项不平凡的任务。

但是,由于您遇到了一个可以用 stackless 很好地处理的问题,我建议您编写项目中确实需要在其中编写 stackless Python 的部分,以及项目中需要 .net 才能使用的另一部分常规 IronPython - 您可以使用 xmlrpc(或 jsonrpc)调用在程序的两个部分之间通信数据 - 在 Python 中做这件事并不复杂,并且可以在两种 Python 风格中工作(例如:http://code .activestate.com/recipes/81549-a-simple-xml-rpc-server/

于 2012-03-07T14:30:24.087 回答
1

对于任何寻求官方答案的人来说,答案是“不”。PythonDotNet 遍历了 Python 对象的内部工作原理。

/// <summary>
/// TypeFlags(): The actual bit values for the Type Flags stored
/// in a class.
/// Note that the two values reserved for stackless have been put
/// to good use as PythonNet specific flags (Managed and Subclass)
/// </summary>
internal class TypeFlags {
    public static int HaveGetCharBuffer = (1 << 0);
    public static int HaveSequenceIn = (1 << 1);
    public static int GC = 0;
    public static int HaveInPlaceOps = (1 << 3);
    public static int CheckTypes = (1 << 4);
    public static int HaveRichCompare = (1 << 5);
    public static int HaveWeakRefs = (1 << 6);
    public static int HaveIter = (1 << 7);
    public static int HaveClass = (1 << 8);
    public static int HeapType = (1 << 9);
    public static int BaseType = (1 << 10);
    public static int Ready = (1 << 12);
    public static int Readying = (1 << 13);
    public static int HaveGC = (1 << 14);
    // 15 and 16 are reserved for stackless <- quote from the python source
    public static int HaveStacklessExtension = 0;
    /* XXX Reusing reserved constants */
    public static int Managed = (1 << 15); // PythonNet specific
    public static int Subclass = (1 << 16); // PythonNet specific
于 2012-11-23T05:37:15.810 回答
1

原来有一个 pythondotnet 选项,您不必替换 exe。这在此处的“入门”部分中简要提及:http: //pythonnet.github.io/readme

这使您可以安装无堆栈(修改 exe)并仍然获得 pythondotnet 功能。

clr.pyd 和 Python.Runtime.dll 文件最终被复制到 Python27/DLLs 目录中,而不是将这两个文件和修改后的 python.exe 复制到根 python 安装目录中。

这一切都是用 x86 完成的,顺便说一句...... x64 支持适用于 pythondotnet,但无法让无堆栈 x64 支持工作......在从源代码构建后让 x64 解释器运行,但像 numpy 这样的库似乎损坏了。

于 2012-03-08T01:41:16.963 回答