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

回答編集履歴

2

解説を追加

2016/11/21 11:24

投稿

attakei
attakei

スコア2740

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  として下さい。
11
11
 
12
12
 
13
- === 追記 ===
13
+ # 追記
14
14
 
15
15
  > モジュール名はfibo.pyで作業ディレクトリへ保存しました
16
16
 
@@ -27,4 +27,48 @@
27
27
  >>> print(sys.path)
28
28
  ```
29
29
 
30
- でリストに出せるので、`fibo.py`のある場所が含まれているか確認してみたほうがいと思います。
30
+ でリストに出せるので、`fibo.py`のある場所が含まれているか確認してみたほうがいと思います。
31
+
32
+
33
+ # 追記2
34
+
35
+ 細かい部分は端折って挙動解説と今回のトラブルの問題点を書いてみます。
36
+
37
+ ## importの仕組み
38
+
39
+ pythonでの`import`を処理する際には、前述の`sys.path`にリストアップされている中に`(モジュール名).py`を探すようになっています。
40
+
41
+ 今回は、
42
+
43
+ ```python
44
+ >>> import sys
45
+ >>> print(sys.path)
46
+ ['', 'C:\\Users\\mtg-1\\Anaconda2\\python27.zip', 'C:\\Users\\mtg-1\\Anaconda2\\DLLs', 'C:\\Users\\mtg-1\\Anaconda2\\lib', 'C:\\Users\\mtg-1\\Anaconda2\\lib\\plat-win', 'C:\\Users\\mtg-1\\Anaconda2\\lib\\lib-tk', 'C:\\Users\\mtg-1\\Anaconda2', 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages', 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\Sphinx-1.4.6-py2.7.egg', 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\win32', 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\win32\\lib', 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\Pythonwin', 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\setuptools-27.2.0-py2.7.egg']
47
+ ```
48
+
49
+ なっているため、`import fibo`を実行すると
50
+
51
+ - ''
52
+ - 'C:\\Users\\mtg-1\\Anaconda2\\python27.zip'
53
+ - 'C:\\Users\\mtg-1\\Anaconda2\\DLLs'
54
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib'
55
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\plat-win'
56
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\lib-tk'
57
+ - 'C:\\Users\\mtg-1\\Anaconda2'
58
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages'
59
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\Sphinx-1.4.6-py2.7.egg'
60
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\win32'
61
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\win32\\lib'
62
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\Pythonwin'
63
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\setuptools-27.2.0-py2.7.egg'
64
+
65
+ に、fibo.pyがないかを探すようになっています。
66
+
67
+ ## 今回の問題点と解消について
68
+
69
+ 今回のケースだと、もともとのfibo.pyが`c:\python27\python`にあるものの、
70
+ パス自体が上記の`sys.path`に含まれていないため、import対象として見つけることができません。
71
+
72
+ リストの先頭にある`''`がpythonのインタラクティブシェルを実行した際のパスを指すので、
73
+ `C:\Users\mtg-1`上にありさえすれば、importが問題なく動くようになっています。
74
+

1

パス周りについて追記

2016/11/21 11:24

投稿

attakei
attakei

スコア2740

answer CHANGED
@@ -7,4 +7,24 @@
7
7
 
8
8
  ```
9
9
 
10
- として下さい。
10
+ として下さい。
11
+
12
+
13
+ === 追記 ===
14
+
15
+ > モジュール名はfibo.pyで作業ディレクトリへ保存しました
16
+
17
+ 保存した**作業ディレクトリ**は`C:\Users\mtg-1`であっているかの確認をしてみたほうが良いかもしれないです。
18
+
19
+
20
+ import指定するモジュール名が、ファイル名が正しいのにもかかわらずimportできない場合、
21
+ ファイルがインポート用のパスのどこにもないのが原因となります。
22
+
23
+ 「どこを探索するか」は`sys.path`に含まれているので、
24
+
25
+ ```python
26
+ >>> import sys
27
+ >>> print(sys.path)
28
+ ```
29
+
30
+ でリストに出せるので、`fibo.py`のある場所が含まれているか確認してみたほうがいと思います。