是否有可能使用stackthless python 2.7.2与pythondotnet?

时间:2012-03-07 03:42:39

标签: python cpython python.net python-stackless stackless

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

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

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

Stackless Python: http://zope.stackless.com/

Python for .NET: http://pythonnet.github.io/

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

3 个答案:

答案 0 :(得分:2)

正如你所说 - 不,这是不可能的:“合并两个项目的来源”也是一项非常重要的任务。

然而,sicne你有一个很好的无问题处理的问题,我建议编写项目的一部分,需要无需堆栈的Python写入其中,以及项目的另一部分,需要.net使用常规IronPython - 您可以使用xmlrpc(或jsonrpc)调用在程序的两个部分之间进行通信 - 在Python中执行它并不复杂,并且可以在两种Python风格中使用(例如:{{ 3}})

答案 1 :(得分:1)

事实证明pythondotnet有一个选项,你不必替换exe。这里的“入门”部分简要提到了这一点: http://pythonnet.github.io/readme

这允许您然后安装stackless(修改exe)并仍然获得pythondotnet功能。

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

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

答案 2 :(得分:1)

对于寻求官方答复的人来说,这是“不”。 PythonDotNet遍历Python的Object的内部工作。

/// <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