実現したいこと
C#のファイルでpythonファイルを実行したい
前提
参考にしたサイトは以下になります。
https://tpsxai.com/preparing_pythonnet/
自分なりに参考にしたサイトを見てコーディングしたのですがエラーが発生します。
またわからない問題が二つ発生しています。
①デバックした際に以下のエラーが発生します。
発生している問題・エラーメッセージ
System.DllNotFoundException: 'DLL 'python38' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)'
このエラーが PythonEngine.PythonHome = PYTHON_HOME;の部分を指しています。
②pythonファイルで作成したクラスを使用したいのですが、using (Py.GIL())の処理部分をどうしようすればいいのかわかりません。
この質問に関しては大雑把な質問で申し訳ないのですがご教授いただければ幸いです。
該当のソースコード
public Form1()
{
InitializeComponent(); // // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。 // } /// <summary> /// プロセスの環境変数PATHに、指定されたディレクトリを追加する(パスを通す)。 /// </summary> /// <param name="paths">PATHに追加するディレクトリ。</param> public static void AddEnvPath(params string[] paths) { var envPaths = Environment.GetEnvironmentVariable("PATH").Split(Path.PathSeparator).ToList(); foreach (var path in paths) { if (path.Length > 0 && !envPaths.Contains(path)) { envPaths.Insert(0, path); } } Environment.SetEnvironmentVariable("PATH", string.Join(Path.PathSeparator.ToString(), envPaths), EnvironmentVariableTarget.Process); }
.
.
.
省略
private void Form1_Load(object sender, System.EventArgs e)
{
// *-------------------------------------------------------* // * python環境の設定 // *-------------------------------------------------------* // python環境にパスを通す // TODO: 環境に合わせてパスを直すこと var PYTHON_HOME = Environment.ExpandEnvironmentVariables(@"C:\Users\ユーザー名\anaconda3\envs\仮想環境フォルダ"); // pythonnetが、python本体のDLLおよび依存DLLを見つけられるようにする //上記で作成したAddEnvPath()メソッドを使用する AddEnvPath( PYTHON_HOME, Path.Combine(PYTHON_HOME, @"Library\bin") ); // python環境に、PYTHON_HOME(標準pythonライブラリの場所)を設定 PythonEngine.PythonHome = PYTHON_HOME; // pythonの処理をする=numpyの定義とバージョンをラベルに表示させる using (Py.GIL()) { }
試したこと
プロジェクトの参照を自分なりに調べて確認したのですが、その問題は当てはまらなかった気がします。
プログラミング初心者なので、自分の説明不足、調べ不足等あるかと思いますが、なかなか解決できないため質問させていただきます。
どうかよろしくお願いします。
補足情報(FW/ツールのバージョンなど)
.NETFrameWork4.7.2 visualstudio2022
回答3件
あなたの回答
tips
プレビュー