環境への準備
bar.pyファイルを含む新しいフォルダfooを作成します
$ tree foo
foo
└── bar.py
0 directories, 1 file
bar.pyの内容は非常にシンプルで、printステートメントを書くだけです。
print("successful to be imported")
bar.pyが一度インポートされる限り、印刷されると実行されます
重複インポートはありません
'sys.modulesが存在するため、インポートしたモジュールをインポートすると、実際には効果がありません。'
>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>
インポート方法1を繰り返します
python2を使用する場合(前にfooフォルダーの下に追加することを忘れないでください__init__.py
)、直接使用できるreloadメソッドがあります
>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>
>>> reload(bar)
successful to be imported
<module 'foo.bar' from 'foo/bar.pyc'>
python3を使用する場合は、他にも方法があります。詳細については、以下を参照してください。
インポート方法2を繰り返します
Python3.0-> 3.3を使用する場合は、imp.reloadメソッドを使用できます
>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>
>>> import imp
>>> imp.reload(bar)
successful to be imported
<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>
ただし、この方法はPython3.4以降では推奨されていません
<stdin>:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
インポート方法3を繰り返します
Python 3.4以降を使用している場合は、importlib.reloadメソッドを使用してください
>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>
>>> import importlib
>>> importlib.reload(bar)
successful to be imported
<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>
インポート方法4を繰り返します
パッケージローダーについて何か知っている場合(詳細については、以前に書いた記事を読むことができます:https://iswbm.com/84.html)
次の方法も使用できます
>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>
>>> bar.__spec__.loader.load_module()
successful to be imported
<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>
インポート方法5を繰り返します
繰り返しインポートに影響を与えるのはsys.modulesなので、インポートしたパッケージをそこから削除できますか?
>>> import foo.bar
successful to be imported
>>>
>>> import foo.bar
>>>
>>> import sys
>>> sys.modules['foo.bar']
<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>
>>> del sys.modules['foo.bar']
>>>
>>> import foo.bar
successful to be imported
前の例ではすべて使用しましたfrom foo import bar
が、この例では使用import foo.bar
しました。なぜですか。
これは、from foo import bar
この方法を使用する場合、sys.modulesモジュールを削除してこのメソッドをオーバーライドすることは無効であるためです。
これは小さな穴と見なす必要があります。知らない人は穴に落ちて登ることができません。
>>> import foo.bar
successful to be imported
>>>
>>> import foo.bar
>>>
>>> import sys
>>> del sys.modules['foo.bar']
>>> from foo import bar
>>>
多数(300)のイラストが含まれているオリジナルの「PyCharmChinese Guide」e-bookをお勧めします。これはよくできていて、すべてのPythonエンジニアによるコレクションに値します。
アドレスは次のとおりです:http://pycharm.iswbm.com