[解決済み] 任意のPythonソースファイルをインポートする。(Python 3.3+)
2023-05-18 07:53:21
質問
任意の Python ソースファイル (ファイル名は任意の文字を含むことができ、また、常に
.py
で終わるとは限りません)を
Python 3.3+
?
私が使用したのは
imp.load_module
を次のようにします。
>>> import imp
>>> path = '/tmp/a-b.txt'
>>> with open(path, 'U') as f:
... mod = imp.load_module('a_b', f, path, ('.py', 'U', imp.PY_SOURCE))
...
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
Python 3.3ではまだ動作していますが、以下のように
imp.load_module
のドキュメントによると、これは非推奨です。
バージョン 3.3 以降、非推奨 : モジュールをロードするためにローダーを使用する必要があるため、不要です。 を使うべきであり、 find_module() は非推奨です。
と
imp
モジュールのドキュメントでは
importlib
:
ノート 新しいプログラムでは、このモジュールではなくimportlibを使用する必要があります。
Python 3.3+ で任意の Python ソースファイルをロードするために、非推奨の
imp.load_module
関数を使わずに、Python 3.3+ で任意の Python ソースファイルを読み込む正しい方法は何ですか?
どのように解決するのですか?
以下のサイトから解決策を見つけました。
importlib
テストコード
.
使用方法 importlib.machinery.SourceFileLoaderを使用します。 :
>>> import importlib.machinery
>>> loader = importlib.machinery.SourceFileLoader('a_b', '/tmp/a-b.txt')
>>> mod = loader.load_module()
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
注意 でしか動作しません。 Python 3.3+ .
アップデイト
Loader.load_module
は Python 3.4 以降では非推奨です。使用方法
Loader.exec_module
を使用します。
>>> import types
>>> import importlib.machinery
>>> loader = importlib.machinery.SourceFileLoader('a_b', '/tmp/a-b.txt')
>>> mod = types.ModuleType(loader.name)
>>> loader.exec_module(mod)
>>> mod
<module 'a_b'>
>>> import importlib.machinery
>>> import importlib.util
>>> loader = importlib.machinery.SourceFileLoader('a_b', '/tmp/a-b.txt')
>>> spec = importlib.util.spec_from_loader(loader.name, loader)
>>> mod = importlib.util.module_from_spec(spec)
>>> loader.exec_module(mod)
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
最新
-
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の構文に新しいステートメントを追加することはできますか?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複