[解決済み] 相対パスからモジュールをインポートする
2022-03-19 16:51:22
質問
Python モジュールの相対パスを指定してインポートするにはどうすればよいですか?
例えば
dirFoo
には
Foo.py
と
dirBar
および
dirBar
には
Bar.py
をインポートするにはどうすればよいですか?
Bar.py
を
Foo.py
?
ここで、視覚的に表現してみましょう。
dirFoo\
Foo.py
dirBar\
Bar.py
Foo
を含めることを希望します。
Bar
しかし、フォルダ階層を再構築するという選択肢はない。
解決方法は?
両方のディレクトリが実際のPythonパッケージであると仮定します。
__init__.py
ファイルの中にある)、スクリプトの位置から相対的にモジュールをインクルードするための安全な解決策を紹介します。
これは、スクリプトに一連のモジュールを含める必要があるため、これを行いたいのだと推測します。私はいくつかの製品でこれを使用しており、別のディレクトリから呼び出されたスクリプトや、新しいインタプリタを開く代わりに python execute で実行されたスクリプトなど、多くの特殊なシナリオで機能します。
import os, sys, inspect
# realpath() will make your script run, even if you symlink it :)
cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe() ))[0]))
if cmd_folder not in sys.path:
sys.path.insert(0, cmd_folder)
# Use this if you want to include modules from a subfolder
cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"subfolder")))
if cmd_subfolder not in sys.path:
sys.path.insert(0, cmd_subfolder)
# Info:
# cmd_folder = os.path.dirname(os.path.abspath(__file__)) # DO NOT USE __file__ !!!
# __file__ fails if the script is called in different ways on Windows.
# __file__ fails if someone does os.chdir() before.
# sys.argv[0] also fails, because it doesn't not always contains the path.
おまけに、この方法では、システムにインストールされているモジュールではなく、あなたのモジュールをPythonに使わせることができます。
警告! 現在のモジュールが
egg
ファイルを作成します。おそらくこれも失敗でしょう。
関連
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] フルパスでモジュールをインポートするには?
-
[解決済み] 億の相対的輸入
-
[解決済み] 他のPythonファイルをインポートするには?
-
[解決済み] モジュール名を文字列で指定してインポートするには?
-
[解決済み] import module」または「from module import」を使用しますか?
-
[解決済み】Python 3での相対インポート
-
[解決済み】典型的なテストディレクトリ構造でunittestを実行する
-
[解決済み] 相対パスやファイル名から絶対パスを解決する
最新
-
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機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Python百行で韓服サークルの画像クロールを実現する
-
PythonによるExcelファイルの一括操作の説明
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] __init__.py でも「非パッケージで相対的なインポートを試みた」を修正する方法
-
[解決済み] Pythonで相対インポートを行うには?
-
[解決済み] なぜ "import *"がいけないのですか?