teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

微修正

2021/04/08 00:43

投稿

quickquip
quickquip

スコア11314

answer CHANGED
@@ -3,8 +3,8 @@
3
3
  そんなことはないのでは。
4
4
 
5
5
  ファイルの入出力を相対パスで書く時はカレントディレクトリが基準で、
6
- 相対importはlib.pyの場所(要はlibsディレクトリ)が基準です。
6
+ 相対importはlib.pyの場所が基準です。
7
- (というかmain.pyから見たパスが使われるなら、lib.pyから**見た場所じゃない**ということでそれは**相対**じゃない?)
7
+ (というかmain.pyから見たパスが使われるなら、lib.pyから**見た場所じゃない**ということでそれは**相対**じゃないですよね?)
8
8
 
9
9
  ----
10
10
 
@@ -19,8 +19,11 @@
19
19
  ```python
20
20
  import libs.lib_sub
21
21
  ```
22
+ と書くのが絶対importで、これはsys.pathから探索されます。
22
- と書くが絶対importで、これは実行スクリプトのmain.pyがある場所(要はhogeディレクトリ)が基準になます。
23
+ 上記場合実行スクリプトのmain.pyがある場所(要はhogeディレクトリ)が基準になると期待して書いています。
23
24
 
25
+
26
+ それに対して、
24
27
  ```python
25
28
  from . import lib_sub
26
29
  ```
@@ -28,10 +31,11 @@
28
31
  ```python
29
32
  from .lib_sub import foo
30
33
  ```
31
- 書くのが相対importでしょう。
34
+ 書くのが相対importでしょう。
35
+ これらはlib.pyがある場所(要はlibsディレクトリ)を基準に探索します。
32
36
 
33
37
 
34
38
  ----
35
39
 
36
40
  だいたいにおいて相対importを使う方が自然だと思います。
37
- 例えば「ちょっと気が変わってlibsというパッケージ名を別の名前にしたくなった」とか「libsの上にもうひとつ親パッケージを作って `hogehoge.libs` と一段深くしたくなった」とかいう時に、相対importが使わていればlib.pyの中変更する必要がないからです。
41
+ 例えば「ちょっと気が変わってlibsというパッケージ名を別の名前にしたくなった」とか「libsの上にもうひとつ親パッケージを作って `hogehoge.libs` と一段深くしたくなった」とかいう時に、相対importが使わていればlib.pyの中変更する必要がないという利点があるからです。