質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

5199閲覧

作成したモジュールがImportできない

Casablanca_mtg

総合スコア209

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

1クリップ

投稿2016/11/21 03:36

お世話になります
サクラエディタで下記のfibo.pyを作成しました。

-- coding: utf-8 --

Fibonacci numbers module

def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b

def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
モジュール名はfibo.pyで作業ディレクトリへ保存しました
Python インタプリタに入り、モジュールを以下のコマンドで import しました。
C:\Users\mtg-1>python
Python 2.7.12 |Anaconda 4.2.0 (64-bit)| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org

import fibo.py

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named fibo.py

なぜ、エラーが返るのかわかりません。 何か間違っていますか?
よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

モジュールインポート時の指定方法がおかしいです。

拡張子は不要なので

python

1import fibo 2

として下さい。

追記

モジュール名はfibo.pyで作業ディレクトリへ保存しました

保存した作業ディレクトリC:\Users\mtg-1であっているかの確認をしてみたほうが良いかもしれないです。

import指定するモジュール名が、ファイル名が正しいのにもかかわらずimportできない場合、
ファイルがインポート用のパスのどこにもないのが原因となります。

「どこを探索するか」はsys.pathに含まれているので、

python

1>>> import sys 2>>> print(sys.path)

でリストに出せるので、fibo.pyのある場所が含まれているか確認してみたほうがいと思います。

追記2

細かい部分は端折って挙動解説と今回のトラブルの問題点を書いてみます。

importの仕組み

pythonでのimportを処理する際には、前述のsys.pathにリストアップされている中に(モジュール名).pyを探すようになっています。

今回は、

python

1>>> import sys 2>>> print(sys.path) 3['', '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']

なっているため、import fiboを実行すると

- ''

  • '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'

に、fibo.pyがないかを探すようになっています。

今回の問題点と解消について

今回のケースだと、もともとのfibo.pyがc:\python27\pythonにあるものの、
パス自体が上記のsys.pathに含まれていないため、import対象として見つけることができません。

リストの先頭にある''がpythonのインタラクティブシェルを実行した際のパスを指すので、
C:\Users\mtg-1上にありさえすれば、importが問題なく動くようになっています。

投稿2016/11/21 04:51

編集2016/11/21 11:24
attakei

総合スコア2738

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Casablanca_mtg

2016/11/21 04:55

すみません。C:\Users\mtg-1>python Python 2.7.12 |Anaconda 4.2.0 (64-bit)| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. Anaconda is brought to you by Continuum Analytics. Please check out: http://continuum.io/thanks and https://anaconda.org >>> import fibo Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named fibo 先ほどは間違っていました Import fiboとしてもエラーが返ります。 やり方が間違っているのでしょうか?
Casablanca_mtg

2016/11/21 05:36

確認しました。 C:\Users\mtg-1>python Python 2.7.12 |Anaconda 4.2.0 (64-bit)| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. Anaconda is brought to you by Continuum Analytics. Please check out: http://continuum.io/thanks and https://anaconda.org >>> import sys >>> print(sys.path) ['', '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'] このようになりました。やはりAnacondaが影響していたのですね この場合はどうすればよいのでしょうか?
attakei

2016/11/21 05:38

念のためですが、いまpythonを実行しようとしている C:\Users\mtg-1 でdirコマンドを使って、fibo.pyがあるかを確認してみてもらえないでしょうか。
Casablanca_mtg

2016/11/21 06:52

すみません。 C:\Users\mtg-1>dir c:\python27\python\fibo.py ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は BA76-8F7D です c:\python27\python のディレクトリ 2016/11/21 12:52 315 fibo.py 1 個のファイル 315 バイト 0 個のディレクトリ 357,241,815,040 バイトの空き領域 このようになりました
attakei

2016/11/21 07:07

なるほど、であれば実行する場所を変えるか、fibo.pyの場所を変えれば解決します。 fibo.pyをC:\Users\mtg-1にコピーしてください
Casablanca_mtg

2016/11/21 07:31

ありがとうございます。できましたがC:\Users\mtg-1直下に置くことで解決するわけですがなぜ c:\python27\pythonだとIMぽrtできないのでしょうか?自作のモジュールは設置場所を選ばなければいけないのですね。そのあたりの理由を教えていただけると助かります。よろしくお願いいたします
Casablanca_mtg

2016/11/21 23:29

ありがとうございます。わかりやすくご説明いただいたので理解できました。 まだまだですがこのように1つづつクリアして勉強していきたいと思います。重ねてお礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問