回答編集履歴

2

解説を追加

2016/11/21 11:24

投稿

attakei
attakei

スコア2738

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- === 追記 ===
25
+ # 追記
26
26
 
27
27
 
28
28
 
@@ -57,3 +57,93 @@
57
57
 
58
58
 
59
59
  でリストに出せるので、`fibo.py`のある場所が含まれているか確認してみたほうがいと思います。
60
+
61
+
62
+
63
+
64
+
65
+ # 追記2
66
+
67
+
68
+
69
+ 細かい部分は端折って挙動解説と今回のトラブルの問題点を書いてみます。
70
+
71
+
72
+
73
+ ## importの仕組み
74
+
75
+
76
+
77
+ pythonでの`import`を処理する際には、前述の`sys.path`にリストアップされている中に`(モジュール名).py`を探すようになっています。
78
+
79
+
80
+
81
+ 今回は、
82
+
83
+
84
+
85
+ ```python
86
+
87
+ >>> import sys
88
+
89
+ >>> print(sys.path)
90
+
91
+ ['', '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']
92
+
93
+ ```
94
+
95
+
96
+
97
+ なっているため、`import fibo`を実行すると
98
+
99
+
100
+
101
+ - ''
102
+
103
+ - 'C:\\Users\\mtg-1\\Anaconda2\\python27.zip'
104
+
105
+ - 'C:\\Users\\mtg-1\\Anaconda2\\DLLs'
106
+
107
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib'
108
+
109
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\plat-win'
110
+
111
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\lib-tk'
112
+
113
+ - 'C:\\Users\\mtg-1\\Anaconda2'
114
+
115
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages'
116
+
117
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\Sphinx-1.4.6-py2.7.egg'
118
+
119
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\win32'
120
+
121
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\win32\\lib'
122
+
123
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\Pythonwin'
124
+
125
+ - 'C:\\Users\\mtg-1\\Anaconda2\\lib\\site-packages\\setuptools-27.2.0-py2.7.egg'
126
+
127
+
128
+
129
+ に、fibo.pyがないかを探すようになっています。
130
+
131
+
132
+
133
+ ## 今回の問題点と解消について
134
+
135
+
136
+
137
+ 今回のケースだと、もともとのfibo.pyが`c:\python27\python`にあるものの、
138
+
139
+ パス自体が上記の`sys.path`に含まれていないため、import対象として見つけることができません。
140
+
141
+
142
+
143
+ リストの先頭にある`''`がpythonのインタラクティブシェルを実行した際のパスを指すので、
144
+
145
+ `C:\Users\mtg-1`上にありさえすれば、importが問題なく動くようになっています。
146
+
147
+
148
+
149
+

1

パス周りについて追記

2016/11/21 11:24

投稿

attakei
attakei

スコア2738

test CHANGED
@@ -17,3 +17,43 @@
17
17
 
18
18
 
19
19
  として下さい。
20
+
21
+
22
+
23
+
24
+
25
+ === 追記 ===
26
+
27
+
28
+
29
+ > モジュール名はfibo.pyで作業ディレクトリへ保存しました
30
+
31
+
32
+
33
+ 保存した**作業ディレクトリ**は`C:\Users\mtg-1`であっているかの確認をしてみたほうが良いかもしれないです。
34
+
35
+
36
+
37
+
38
+
39
+ import指定するモジュール名が、ファイル名が正しいのにもかかわらずimportできない場合、
40
+
41
+ ファイルがインポート用のパスのどこにもないのが原因となります。
42
+
43
+
44
+
45
+ 「どこを探索するか」は`sys.path`に含まれているので、
46
+
47
+
48
+
49
+ ```python
50
+
51
+ >>> import sys
52
+
53
+ >>> print(sys.path)
54
+
55
+ ```
56
+
57
+
58
+
59
+ でリストに出せるので、`fibo.py`のある場所が含まれているか確認してみたほうがいと思います。