回答編集履歴
4
追記 chdir する IDLE の仕様について
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
間違い訂正
test
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
## IDLE で実行した時の挙動 (実装詳細)
|
4
4
|
|
5
5
|
IDLE での実行(Run Module)では通常の実行とは異なり、主に簡易デバッグ用途なので、
|
6
|
-
挙動が異なる場合があります。具体的には **
|
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
文章整形
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' という文字列を返し
|
54
|
+
TargetPath はエラーとして 'error' という文字列を返し、想定外の path にアクセスしようとして件のエラーとなります。
|
55
|
+
|
49
56
|
IDLEでの実行では、IDEL内の shell で os.getcwd() で確認した場所に拘わらず、
|
50
57
|
Run Module で実行したときの cwd は ファイルの場所 上記の場合 /home/test になります。
|
51
58
|
|
1
markdown 解釈されていたワードを修正
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
|
最後に問題の症状について
|