回答編集履歴

4

追記 chdir する IDLE の仕様について

2024/12/12 23:32

投稿

teamikl
teamikl

スコア8791

test CHANGED
@@ -1,6 +1,6 @@
1
1
  コメントの情報は全部追いきれてませんが、IDLEの情報です。IDLE特有のハマりポイントもあるので
2
2
 
3
- ## IDLE で実行した時の挙動 (実装詳細)
3
+ ## IDLE で実行した時の挙動
4
4
 
5
5
  IDLE での実行(Run Module)では通常の実行とは異なり、主に簡易デバッグ用途なので、
6
6
  挙動が異なる場合があります。具体的には **実行前に対象のファイルの場所に chdir してます**
@@ -18,6 +18,9 @@
18
18
  とも状況が一致します。
19
19
 
20
20
  残念ながら、IDLE 側の設定では起動する作業ディレクトリの指定はできません ⇒ 他の IDE を使おう。
21
+
22
+ 追記: このchdirする仕様は、他にimport するファイルがある時でも、
23
+   ライブラリの読込パスの設定等をしなくても実行できるようにとの、初心者向けの親切設計。らしい
21
24
 
22
25
  - > pyファイル単体ならIDLEでファイルを開きRun ⇒Run module
23
26
  > で進行過程が把握できますが、複数ファイルとなると表示されません

3

間違い訂正

2024/12/12 23:15

投稿

teamikl
teamikl

スコア8791

test CHANGED
@@ -3,7 +3,7 @@
3
3
  ## IDLE で実行した時の挙動 (実装詳細)
4
4
 
5
5
  IDLE での実行(Run Module)では通常の実行とは異なり、主に簡易デバッグ用途なので、
6
- 挙動が異なる場合があります。具体的には **IDLEでの実行前に対象のファイルの場所に chdir してます**
6
+ 挙動が異なる場合があります。具体的には **実行前に対象のファイルの場所に chdir してます**
7
7
  該当箇所: idlelib ソースコード run_module_event 内
8
8
  https://github.com/python/cpython/blob/3.13/Lib/idlelib/runscript.py#L159
9
9
 

2

文章整形

2024/12/12 23:15

投稿

teamikl
teamikl

スコア8791

test CHANGED
@@ -1,7 +1,9 @@
1
1
  コメントの情報は全部追いきれてませんが、IDLEの情報です。IDLE特有のハマりポイントもあるので
2
2
 
3
+ ## IDLE で実行した時の挙動 (実装詳細)
4
+
3
- IDLE での実行は通常の実行とは異なり、主に簡易デバッグ用途なので、
5
+ IDLE での実行(Run Module)では通常の実行とは異なり、主に簡易デバッグ用途なので、
4
- 挙動が異なる場合があります。具体的には実行前に対象のファイルの場所に chdir してます
6
+ 挙動が異なる場合があります。具体的には **IDLEでの実行前に対象のファイルの場所に chdir してます**
5
7
  該当箇所: idlelib ソースコード run_module_event 内
6
8
  https://github.com/python/cpython/blob/3.13/Lib/idlelib/runscript.py#L159
7
9
 
@@ -15,8 +17,7 @@
15
17
 
16
18
  とも状況が一致します。
17
19
 
18
- 残念ながら、IDLE 側の設定では起動する作業ディレクトリの指定はできません ⇒ 他の IDE を使いましょ
20
+ 残念ながら、IDLE 側の設定では起動する作業ディレクトリの指定はできません ⇒ 他の IDE を使
19
-
20
21
 
21
22
  - > pyファイル単体ならIDLEでファイルを開きRun ⇒Run module
22
23
  > で進行過程が把握できますが、複数ファイルとなると表示されません
@@ -27,8 +28,10 @@
27
28
  コメント内に Popen が見えたので、もし Popen で実行してるのでしたら、
28
29
  適切な cwd 引数を設定することで解消できるかもしれません。(試せないので推測)
29
30
 
31
+ ## 解決策
32
+
30
- あまりお勧めではない解決策ですが一時的にでもとりあえず何とかしたい場合
33
+ あまりお勧めではない解決策としては、とりあえず何とか動かしたい場合の一時的な回避策
31
- 起動時にファイルの場所に chdir
34
+ 起動時にファイルの場所に chdir することで IDLE での実行と同じ状況にできるはずです。(未テスト)
32
35
  ```python
33
36
  import os
34
37
  os.chdir(os.dirname(__file__))
@@ -41,11 +44,15 @@
41
44
  - `__file__` で.pyファイルの場所は所得出来ます。(※ 但し exe化する場合は工夫が必要)
42
45
  - Python のモジュールやパッケージ化の仕組みを使うと path の諸問題は解決できるはず
43
46
 
44
- 最後に問題の症状について
47
+ ## 問題の症状について
48
+
45
49
  例えば、このように ターミナルで /home/xxx/yyy から実行したとしましょう
50
+ ```sh
46
51
  /home/xxx/yyy> python3 /home/test/samle.py
52
+ ```
47
53
  このとき os.getcwd は /home/xxx/yyy で TaregtPath で探索される場所に 目的のファイルがないと
48
- TargetPath はエラーとして 'error' という文字列を返してるため、想定外の path にアクセスしようとして件のエラーとなります。
54
+ TargetPath はエラーとして 'error' という文字列を返し、想定外の path にアクセスしようとして件のエラーとなります。
55
+
49
56
  IDLEでの実行では、IDEL内の shell で os.getcwd() で確認した場所に拘わらず、
50
57
  Run Module で実行したときの cwd は ファイルの場所 上記の場合 /home/test になります。
51
58
 

1

markdown 解釈されていたワードを修正

2024/12/12 23:03

投稿

teamikl
teamikl

スコア8791

test CHANGED
@@ -38,7 +38,7 @@
38
38
  どの様に使われてるのかを把握してないので、実装のヒントのみですが
39
39
 
40
40
  - pathlib を使おう
41
- - __file__ でファイルの場所は所得出来ます。(※ 但し exe化する場合は工夫が必要)
41
+ - `__file__`.pyファイルの場所は所得出来ます。(※ 但し exe化する場合は工夫が必要)
42
42
  - Python のモジュールやパッケージ化の仕組みを使うと path の諸問題は解決できるはず
43
43
 
44
44
  最後に問題の症状について