1. ホーム
  2. python

[解決済み] 同名のモジュールが存在する場合の組み込みライブラリからのインポート

2022-06-14 18:57:53

質問

状況 - 私のproject_folderにcalendarというモジュールがあります。 - Python ライブラリから組み込みの Calendar クラスを使用したいと思います。 - from calendar import Calendar を使用すると、私のモジュールからロードしようとしているため、文句を言われます。

私はいくつかの検索を行いましたが、私の問題に対する解決策を見つけることができないようです。

私のモジュールの名前を変更することなく、何かアイデアはありますか?

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

認められた解決方法は、現在では非推奨のアプローチを含んでいます。

importlibのドキュメント はこちら は、python >= 3.5 のファイルパスから直接モジュールをロードする、より適切な方法の良い例を示しています。

import importlib.util
import sys

# For illustrative purposes.
import tokenize
file_path = tokenize.__file__  # returns "/path/to/tokenize.py"
module_name = tokenize.__name__  # returns "tokenize"

spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = module
spec.loader.exec_module(module)

つまり、パスから任意の .py ファイルをロードして、モジュール名を好きなように設定することができるのです。ですから、単に module_name を、インポート時にモジュールが持つようにしたい任意のカスタム名に調整します。

単一のファイルではなく、パッケージを読み込む。 file_path はパッケージのルートへのパスでなければなりません。 __init__.py