2

プラットフォーム:Windows7両方の32ビットバージョンを想定しています。

私の現在の理解では、両方のインストールプロセスでpython.exe自体を置き換える必要があるため、これは不可能です。

両方から機能を取得するには、それぞれのソースをマージする必要があると思いますか?

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

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

あらゆる種類のcpythonライブラリ(特にmatplotlib)にアクセスしたいので、IronPythonではなくPythonfor.NETを使用しています。

4

3 に答える 3

2

あなたが言うように-いいえ、これは不可能です:両方のプロジェクトの「ソースをマージする」ことも簡単な作業ではありません。

ただし、スタックレスで適切に処理される問題がある場合は、スタックレスPythonを記述する必要のあるプロジェクトの部分と、.netを使用する必要のあるプロジェクトの別の部分を記述することをお勧めします。通常のIronPython-xmlrpc(またはjsonrpc)呼び出しを使用してプログラムの2つの部分の間でデータを通信できます-Pythonで行うのは複雑なことではなく、両方のPythonフレーバーで機能します(例:http:// code .activestate.com / recipes / 81549-a-simple-xml-rpc-server /

于 2012-03-07T14:30:24.087 に答える
1

exeを置き換える必要がないpythondotnetのオプションがあることがわかりました。これは、ここの「はじめに」セクションで簡単に説明されています:http: //pythonnet.github.io/readme

これにより、スタックレスのインストール(exeの変更)を実行し、それでもpythondotnet機能を取得できます。

clr.pydファイルとPython.Runtime.dllファイルは、これらのファイルと変更されたpython.exeの両方をルートpythonインストールディレクトリにコピーするのではなく、Python27/DLLsディレクトリにコピーされることになります。

これはすべてx86で行われました...x64サポートはpythondotnetで機能しますが、スタックレスx64サポートを機能させることができませんでした...ソースからビルドした後にx64インタープリターを実行しましたが、numpyなどのライブラリが壊れているように見えました。

于 2012-03-08T01:41:16.963 に答える
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 に答える