Можно ли использовать Python 2.7.2 без стека с pythondotnet? - PullRequest
2 голосов
/ 07 марта 2012

Платформа: Windows 7 Предполагают 32-битные версии обоих.

В настоящее время я понимаю, что это НЕ возможно, так как оба процесса установки включают замену самого python.exe.

Я предполагаю источникдля каждого должно быть объединено, чтобы получить функциональность от обоих?

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

Python для .NET: http://pythonnet.github.io/

Мы используемPython для .NET поверх IronPython, так как нам нужен доступ ко всему спектру библиотек cpython (например, matplotlib среди прочих).

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Как вы утверждаете - нет, это невозможно: «объединение источника» обоих проектов также будет нетривиальной задачей.

Однако, так как у вас есть проблема, которая хорошо решается без стеков, я бы предложил написать ту часть вашего проекта, для которой в нем нужен Python без стеков, и другую часть вашего проекта, для которой требуется .net использовать обычный IronPython - вы можете связать данные между двумя частями программы, используя вызовы xmlrpc (или jsonrpc) - это не сложно сделать в Python и будет работать в обоих вариантах Python (пример здесь: http://code.activestate.com/recipes/81549-a-simple-xml-rpc-server/)

1 голос
/ 23 ноября 2012

Для тех, кто ищет официальный ответ, это «Нет». 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
1 голос
/ 08 марта 2012

Оказывается, есть опция для 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 оказались поврежденными.

...