このようなファイル構成になっています。
Folder
Common
foo1.py
TestFolder
foo2.py
foo2.pyと
foo1.py` でインポートしたいのですが。試してみましたが、Ubuntuでは動作しませんでした。
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
**パイソンのモジュールの見つけ方
厳密に言うと、module は一つの python ファイルで、package は python ファイルが入ったフォルダで、python にモジュールをインポートするパッケージであることを伝えるための __init__.py
という名前のファイル(空でも可)が付いています。どちらの場合も、モジュールには .py
という拡張子が必要ですが、モジュールのインポートは必要ありません(下記参照)。
デフォルトでは、Pythonはモジュールとパッケージを $PYTHONPATH
で探します。
PYTHONPATHに何が含まれているかを調べるには、pythonで次のコードを実行してください(3)。
import sys
print(sys.path)
ディレクトリの追加方法について
*たまにしかありません
pythonファイルの中で、pythonアプリケーションやスクリプトのheadセクションに以下の行を追加することで、デフォルトのパスに臨時にパスを追加することができます。
import sys
sys.path.insert(0, "/path/to/your/package_or_module")
例:
フォルダがあるとします。例えば、/home/myname/pythonfiles
というフォルダがあって、その中にある module_1.py
というファイルをインポートしたい場合、コードの head セクションに次のように追加します。
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
そして、このファイル module_1.py
を単純にインポートするには、次のようにします。
import module_1
パッケージ*を作成して、そのパッケージからモジュールをインポートしたい場合は、$PYTHONPATH
にモジュールを含むフォルダを作成し、__init__.py
という(空でもよい)ファイルを添付する必要があります。
例:
/home/myname/pythonfilesにある
my_packageというパッケージ(フォルダ)からインポートするには、例1のように
/home/myname/pythonfilesのパスを
$PYTHONPATHに追加し、
module_2.pyというモジュールを(パッケージフォルダ内で)次のように簡単にインポートします。
from <packagename> import module_2
$PYTHONPATH
に恒久的にディレクトリを追加する:。
次の行を ~/.profile
ファイルに追加してください。
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
サブディレクトリ.
パッケージ内のサブディレクトリはそのままではインクルードされず、ディレクトリを "chain"する必要があります。モジュール module_3.py
をインポートするには、フォルダ packagename
の中のフォルダ subfolder
に入れます。
import packagename.subfolder.module_3
パッケージ内のすべてのサブフォルダには、それぞれの __init__.py
ファイルが含まれていることを考えると。
モジュールがスクリプトやアプリケーションと同じディレクトリにある場合。
モジュールがスクリプトやアプリケーションと同じディレクトリにあるときは、モジュールへのパスを挿入する必要はなく、自動的に追加されます。
例:
script.py "と "module.py "が入っているフォルダがあれば、次のようにしてモジュールをインポートすることができます。
import module
注:この回答は最新バージョンのpython3では古くなっていますが、それ以前のバージョンではここにあります。より詳しい情報は、コメントや https://www.python.org/dev/peps/pep-0420/ をご覧ください。
基本的には、syspathに追加したいpythonコードを持つすべてのフォルダには、 ˶ˆ꒳ˆ˵ ) が必要です。これらの\\\は空でも良いです。