2016-09-28 2 views
1

私のプロジェクトでは、呼び出しのためのモジュールとNumpy/Scipyのようなライブラリが使われているので、アルゴリズムのいくつかはPythonで実装されています。今、これらのモジュールを私のUIに埋め込む必要があります(C#で実装され、Windows 7で実行されます)。私がPythonモジュールをDLLのようなファイルにパッケージ化する必要があるのは2つの理由があります(私は組み込みやすいとは言えないので.exeとしてパッケージ化したくありません)。最初の理由は簡単に呼び出すためであり、2番目の理由はアルゴリズムのソースコードを保護するためです。誰にも分かりますか?PythonモジュールとNumpy/Scipyなどの依存関係をC#呼び出しのDLLのような1つのファイルにパッケージ化する方法はありますか?

python4.net

答えて

1

最後に、私はnuitkaを使って、私の問題を解決する:.NETではCPythonを埋め込む

+0

うわー!これは素晴らしいです、pyinstallerの開発者はちょうどpyd nuitkaまたはcythonをコンパイルする必要があることを私に知らせました。 – denfromufa

+0

おそらくあなたはpythonnetコミュニティと共有できるnuitkaの最小の例で要点やgithubプロジェクトを投稿できますか? – denfromufa

0

のTry pythonnet。私のモジュールを.pydファイルにコンパイルし、Python.Runtime.dllの参照を追加してpythonnetを使ってモジュールをインポートすることができます。 私のコンパイル・コマンドは次のとおりです。nuitka --module --nofreeze-stdlib --recurse-all --recurse-not-to=numpy --recurse-not-to=sklearn --recurse-not-to=pywt --recurse-not-to=matplotlib --recurse-not-to=matplotlib.pyplot --recurse-not-to=scipy.io myfile.py と私のC#のコードは次のとおりです。

PythonEngine.Initialize(); 
IntPtr pythonLock = PythonEngine.AcquireLock(); 
PythonEngine.RunSimpleString("import sys\n"); 
PythonEngine.RunSimpleString("sys.path.append('C:\\path\\to\\pyd')\n"); 
PyObject pModule = PythonEngine.ImportModule("modulename"); 
pModule.InvokeMethod("funcitonname", para1, para2); 
+0

私は2つの要件があります。最初の要件は、簡単にクラックされない形で私のPythonソースコードをパッケージ化する必要があるということです。もう1つの要件は、生成されたパッケージをC#コードに統合する必要があることです。 Pythonnetは私の2番目の要件を満たすことができますが、私の最初の要件はどうですか? –

+0

あなたのコードをパッケージ化するpyinstallerを使用してください: https://github.com/pyinstaller/pyinstaller/issues/1801 – denfromufa

+1

ええ、それは動作するかもしれませんが、最終的にはnuitkaを使用して私の問題を解決します。 –

関連する問題