[解決済み] Pythonで相対インポートを行うには?
質問
このようなディレクトリ構造を想像してください。
app/
__init__.py
sub1/
__init__.py
mod1.py
sub2/
__init__.py
mod2.py
コーディング中
mod1
から何かをインポートする必要があります。
mod2
. どうすればいいのでしょうか?
試してみた
from ..sub2 import mod2
が、「Attempted relative import in non-package" 」と表示されます。
ググってみたけど、"しかなかった。
sys.path
操作" のハックです。クリーンな方法はないのでしょうか?
編集:すべての私の
__init__.py
は現在空です。
Edit2: サブ2にはサブパッケージ間で共有されるクラスが含まれているため、これを行おうとしています (
sub1
,
subX
など)。
Edit3: 私が求めている動作は、以下の記述と同じです。 PEP 366 (ジョンBさんありがとうございます)
解決方法は?
誰もが、質問に答えるよりも、何をすべきかを教えたがっているようです。
問題は、mod1.pyをインタプリタに引数として渡すことで、モジュールを'__main__'として実行していることです。
から PEP 328 :
相対インポートでは、モジュールの __name__ 属性を使用して、パッケージ階層におけるそのモジュールの位置を決定します。モジュール名がパッケージ情報を含んでいない場合 (例えば '__main__' に設定されている場合)、 モジュールがファイルシステム上のどこに実際に配置されているかにかかわらず、 モジュールがトップレベルモジュールであるかのように相対インポートが解決されます。
Python 2.6では、メインモジュールから相対的にモジュールを参照する機能が追加されるそうです。 PEP 366 は、この変更について説明しています。
更新情報 : Nick Coghlanによると、推奨される代替案は、-mスイッチを使ってパッケージ内のモジュールを実行することだそうです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
Python 入出力と高次代入の基礎知識
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない