web-dev-qa-db-ja.com

ディレクトリからpython)にユーザー定義モジュールをインポートする

pythonで書いた、数字を含むリストを出力するだけのモジュールをインポートしようとしています。私が抱えている問題は、別のディレクトリからインポートできるようにしたいということです。しかし、私がこれまで読んだ答えは、私の状況ではうまくいかないようです。

たとえば、ドキュメントフォルダ内のディレクトリからprintnumbers.pyをインポートしたい場合、次のように実装することになっています。

    import sys
    sys.path.append('/home/jake/Documents')
    import printnumbers.py

このコードの断片により、指定されたモジュールが存在しないことを通知する「インポートエラー」が発生します。ここからどこに進むべきか正確にはわかりません。パスとモジュール名のスペルが正しいことを確認するために何度もチェックしました。 「sys.path」への追加が何をするのかを正確に理解しようとしています。私が理解していることから、そのディレクトリでモジュールを検索するようにプログラムに指示しているのでしょうか。

私のかなり初心者の質問に答えてくれた人に感謝します。 pythonドキュメントが私の心の枠組みを提供していないということについてのより良い理解を探しています。

7
Ragecoder

ファイルがprintnumbers.pyの場合、モジュールはprintnumbersと呼ばれます(.pyなし)。したがって、

import printnumbers

import sys
sys.path.append('/home/jake/Documents')

'/home/jake/Documents'の末尾にsys.pathを追加します。 sys.pathにリストされているディレクトリは、インポートステートメントによってPythonがモジュールを検索するたびに(リストされている順序で)検索されます(すでにインポートされたモジュールはsys.modulesにキャッシュされます)。 、したがってPythonは、モジュールをインポートするために常にsys.pathディレクトリを検索する必要はありません...)

したがって、ファイル/home/jake/Documents/printnumbers.pyがある場合、import printnumbersは、にリストされているディレクトリにprintnumbers.pyという名前の他のファイルがない場合、Pythonがそれをインポートします。 sys.pathの前に/home/jake/Documents/

ディレクトリをsys.pathに挿入することは、モジュールを検索するためにPythonを設定する通常の方法ではないことに注意してください。通常、PYTHONPATH環境変数に/home/jake/Documentsを追加することをお勧めします。 sys.pathには、PYTHONPATH環境変数にリストされているディレクトリが自動的に含まれます。

10
unutbu

そしてもう1つ、ディレクトリ内の空の__ init __。pyファイルを使用して、pythonパッケージ(その場合のみPythonは、このディレクトリがPython通常のディレクトリ以外のパッケージディレクトリ)であることを認識します。したがって、別のディレクトリからそのパッケージからモジュールをインポートできます。

2
Amit Karnik