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

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

ただいまの
回答率

90.48%

  • Python 2.7

    1314questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,673

kasaburanka

score 131

お世話になります
サクラエディタで下記の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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

拡張子は不要なので

import fibo

として下さい。

 追記

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

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

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

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

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

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

 追記2

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

 importの仕組み

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

今回は、

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

なっているため、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 13: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としてもエラーが返ります。
    やり方が間違っているのでしょうか?

    キャンセル

  • 2016/11/21 14: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が影響していたのですね
    この場合はどうすればよいのでしょうか?

    キャンセル

  • 2016/11/21 14:38

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

    キャンセル

  • 2016/11/21 15: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 バイトの空き領域

    このようになりました

    キャンセル

  • 2016/11/21 16:07

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

    キャンセル

  • 2016/11/21 16:31

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

    キャンセル

  • 2016/11/22 08:29

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

    キャンセル

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 2.7

    1314questions

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