1. ホーム
  2. python

[解決済み] Pythonで相対パスからインポートする

2022-06-17 12:37:38

質問

クライアントコード用のフォルダ、サーバーコード用のフォルダ、およびそれらの間で共有されるコード用のフォルダがあります。

Proj/
    Client/
        Client.py
    Server/
        Server.py
    Common/
        __init__.py
        Common.py

Server.pyとClient.pyからCommon.pyをインポートするにはどうしたらいいですか?

どのように解決するのですか?

EDIT 2014年11月(3年後)。

Python 2.6と3.xは適切な相対インポートをサポートしており、そこではハチャメチャなことをするのを避けることができます。 このメソッドで、あなたは自分が 相対 ではなく、相対インポートであることがわかります。 絶対的 インポートです。 この「...」は、私の上のディレクトリに移動してください、という意味です。

from ..Common import Common

注意点として、これは Python をモジュールとして実行する場合のみ動作します。 の外側で から、モジュールとして実行する場合のみです。 例えば

python -m Proj

オリジナルのハック方法

<ブロッククオート

この方法は、実際にパッケージを「インストール」しないような状況で、今でもよく使われます。 例えば、Django ユーザに人気があります。

sys.path (python がものをインポートするために参照するパスのリスト) に Common/ を追加することができます。

import sys, os
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'Common'))
import Common

os.path.dirname(__file__) は、現在の Python ファイルがあるディレクトリを与えるだけで、そのディレクトリの 'Common/' に移動し、モジュールの 'Common' をインポートします。