質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1396閲覧

Python3: imp.load_dynamic()とは?

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/04/14 13:34

Pythonのとあるコードを読んでいると, imp.load_dynamic()というものが出てきました。
ところがpython3のimpのドキュメント(https://docs.python.org/ja/3/library/imp.html)を見ても該当のものが載っていません。
python2のものには載っていました(https://python-doc-ja.github.io/py27/library/imp.html)。

じゃあpython3では使えないんだな、と思いきや

python3

1>>>import imp 2>>>callable(imp.load_dynamic) 3True

となり使えるらしいです。
ここでよくわからなくなってしまいました。

質問したいのは、

  1. imp.load_dynamic()とは何か?
  2. 今回のような、有効なメソッドが公式ドキュメントに載ってなかったりするのはよくあることなのか、その場合それについての情報はどうやって得ればよいのか

です。
どなたかよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

takenoko_sandさんがimpにこだわらずにいろいろなものを調べたいというのであれば、以下のやり方を覚えておくと便利でしょう。

一般的に、あるモジュールにどういう機能があるかというのは組み込み関数dirでわかります。

python

1>>> import imp 2>>> dir(imp) 3['C_BUILTIN', 'C_EXTENSION', 'IMP_HOOK', 'NullImporter', 'PKG_DIRECTORY', 'PY_CODERESOURCE', 'PY_COMPILED', 'PY_FROZEN', 'PY_RESOURCE', 'PY_SOURCE', 'SEARCH_ERROR', 'SourcelessFileLoader', '_ERR_MSG', '_HackedGetData', '_LoadCompiledCompatibility', '_LoadSourceCompatibility', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_builtin_from_name', '_exec', '_fix_co_filename', '_load', 'acquire_lock', 'cache_from_source', 'create_dynamic', 'find_module', 'get_frozen_object', 'get_magic', 'get_suffixes', 'get_tag', 'importlib', 'init_builtin', 'init_frozen', 'is_builtin', 'is_frozen', 'is_frozen_package', 'load_compiled', 'load_dynamic', 'load_module', 'load_package', 'load_source', 'lock_held', 'machinery', 'new_module', 'os', 'release_lock', 'reload', 'source_from_cache', 'sys', 'tokenize', 'types', 'util', 'warnings']

ただし、sysとかtypesのように標準モジュールや標準関数が含まれていることもあるので注意してください。
また、パッケージの場合にはサブモジュールの中を知りたければ、サブモジュールについてdirで調べなければなりません。

個々の機能について調べたいときは、helpを使うか、.__doc__をprintします。
例えば、impを調べたければ以下のようにします。

python

1>>> print(imp.__doc__) 2This module provides the components needed to build your own __import__ 3function. Undocumented functions are obsolete. 4 5In most cases it is preferred you consider using the importlib module's 6functionality over this module.

ドキュメントのない関数は廃物ですよ、と書かれています。つまり、意識的にドキュメントをなくしたということです。
同様にimp.load_dynamicを調べてみましょう。

python

1>>> print(imp.load_dynamic.__doc__) 2**DEPRECATED** 3 4 Load an extension module.

機能は拡張モジュールをロードすることですが、廃棄済みという警告が書かれています。

こういうやり方を覚えておくと、ネットを調べなくても大抵のことはわかります。

投稿2021/04/14 22:30

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/15 11:28

dir()や__doc__を知らなかったので助かりました。 ありがとうございます。
guest

0

imp --- import 内部へのアクセス
「バージョン 3.4 で非推奨: imp モジュールは importlib を後継として非推奨にされました。」だそうです

投稿2021/04/14 17:01

jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問