質問編集履歴

1

エラーの箇所

2023/04/16 12:25

投稿

kkk00
kkk00

スコア1

test CHANGED
File without changes
test CHANGED
@@ -5,25 +5,91 @@
5
5
 
6
6
  ### 前提
7
7
 
8
+ 参考にしたサイトは以下になります。
9
+ https://tpsxai.com/preparing_pythonnet/
8
- Ironpythonというもの使いpythonのメソッドをC#上で使用したのですが、今まで使用したことがなくエラーが出てしまい困っております。
10
+ 自分なりに参考にしたサイト見てコーディングしたのですがエラーが発生します。
11
+
12
+
13
+ またわからない問題が二つ発生しています。
14
+ ①デバックした際に以下のエラーが発生します。
9
15
 
10
16
  ### 発生している問題・エラーメッセージ
17
+ System.DllNotFoundException: 'DLL 'python38' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)'
18
+
19
+
20
+ このエラーが PythonEngine.PythonHome = PYTHON_HOME;の部分を指しています。
21
+
22
+ ②pythonファイルで作成したクラスを使用したいのですが、using (Py.GIL())の処理部分をどうしようすればいいのかわかりません。
23
+ この質問に関しては大雑把な質問で申し訳ないのですがご教授いただければ幸いです。
11
24
 
12
25
 
13
26
 
14
- CS1061 'ScriptRuntime' に 'GetFunction' の定義が含まれておらず、型 'ScriptRuntime' の最初の引数を受け付けるアクセス可能な拡張メソッド 'GetFunction' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください。
27
+
28
+
15
29
 
16
30
 
17
31
  ### 該当のソースコード
32
+ public Form1()
33
+ {
34
+
35
+ InitializeComponent();
18
36
 
37
+ //
38
+ // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
39
+ //
40
+ }
41
+
42
+ /// <summary>
43
+ /// プロセスの環境変数PATHに、指定されたディレクトリを追加する(パスを通す)。
44
+ /// </summary>
45
+ /// <param name="paths">PATHに追加するディレクトリ。</param>
19
- string scriptPath = @"pythonファイルのpath";
46
+ public static void AddEnvPath(params string[] paths)
47
+ {
48
+ var envPaths = Environment.GetEnvironmentVariable("PATH").Split(Path.PathSeparator).ToList();
49
+ foreach (var path in paths)
50
+ {
20
- var engine = IronPython.Hosting.Python.CreateEngine();
51
+ if (path.Length > 0 && !envPaths.Contains(path))
52
+ {
21
- engine.ExecuteFile(scriptPath);
53
+ envPaths.Insert(0, path);
54
+ }
55
+ }
56
+ Environment.SetEnvironmentVariable("PATH", string.Join(Path.PathSeparator.ToString(), envPaths), EnvironmentVariableTarget.Process);
57
+ }
58
+ .
59
+ .
60
+ .
61
+ 省略
62
+
63
+ private void Form1_Load(object sender, System.EventArgs e)
64
+ {
65
+
66
+ // *-------------------------------------------------------*
67
+ // * python環境の設定
68
+ // *-------------------------------------------------------*
69
+
70
+ // python環境にパスを通す
71
+ // TODO: 環境に合わせてパスを直すこと
72
+ var PYTHON_HOME = Environment.ExpandEnvironmentVariables(@"C:\Users\ユーザー名\anaconda3\envs\仮想環境フォルダ");
73
+ // pythonnetが、python本体のDLLおよび依存DLLを見つけられるようにする
74
+ //上記で作成したAddEnvPath()メソッドを使用する
75
+ AddEnvPath(
76
+ PYTHON_HOME,
22
- var func = engine.Runtime.GetFunction("pythonのメソッド名");
77
+ Path.Combine(PYTHON_HOME, @"Library\bin")
78
+ );
79
+
80
+ // python環境に、PYTHON_HOME(標準pythonライブラリの場所)を設定
81
+ PythonEngine.PythonHome = PYTHON_HOME;
82
+ // pythonの処理をする=numpyの定義とバージョンをラベルに表示させる
83
+ using (Py.GIL())
84
+ {
85
+
86
+
87
+ }
23
88
 
24
89
 
25
90
 
26
- 上記のコードを書いた際にGetFunctionの下に赤波線でエラーが出ます。
91
+
92
+
27
93
 
28
94
  ### 試したこと
29
95
 
@@ -32,6 +98,7 @@
32
98
  どうかよろしくお願いします。
33
99
 
34
100
  ### 補足情報(FW/ツールのバージョンなど)
101
+ .NETFrameWork4.7.2 visualstudio2022
35
102
 
36
103
 
37
104