Pythonのモジュールとパッケージについてどのくらい知っていますか?

一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して4日目です。クリックしてイベントの詳細をご覧ください

最後の共有を継続しましたが、今回はパッケージをパッケージの下にネストし続けます。プロジェクトディレクトリは次のとおりです。

pkg1
---__init__.py
---mod1.py
------pkg2
---------__init__.py
---------mod2.py
复制代码
import pkg1.pkg2.mod2
复制代码

mod2をインポートしようとしますが、今回は最初にpkg1をインポートし、次にpkg2をインポートし、最後にmod2をインポートします。

import pkg1
import pkg2
import mod2
复制代码

出力から、mod1が自動的にインポートされていないことがわかります。

import pkg1.pkg2.mod2

pkg1.pkg2.mod2.say_hi()
复制代码

pkg1.pkg2.mod2.say_hi()によってmod2のsay_hi関数にアクセスします

print('pkg1' in sys.modules)#True
print('pkg1.pkg2' in sys.modules)#True
print('pkg1.pkg2.mod2' in sys.modules)#True
复制代码

インポートされたモジュールのエイリアスを作成することにより、mod2モジュールオブジェクトのプロパティにすばやくアクセスします。Pythonは、mod2にアクセスできるパッケージを自動的に実行します。これらのパッケージがインポートされ、出力を介してsys.modulesキャッシュに追加されていることを確認するのは難しくありません。

import pkg1.pkg2.mod2 as mod2

mod2.say_hi()
复制代码
pkg1
---__init__.py
---mod1.py
------pkg2
---------__init__.py
---------mod2.py
main.py
复制代码

pkg1パッケージの下__init__.py

import pkg1.pkg2.mod2
print("import pkg1")
复制代码

pkg1パッケージの下の__init__.pyファイルは、絶対パスpkg1.pkg2.mod2です。これは、実行__init__.pyファイルがpkg1の外部で実行されることを意味するため、pkg1もパスに含まれます。このプロジェクトでは、main.pyがエントリファイルです。このプロジェクトを実行するには、フォルダ内のmain.pyファイルのみを実行する必要があります。 。pkg1とmain.pyは同じディレクトリレベルにあり、サブモジュールはすべて

import pkg1.pkg2.mod2 as mod2

mod2.say_hi()
复制代码

さらに説明するために、別のプロジェクトを作成してみましょう。プロジェクトは2つに分かれています。

main.py
my_mod.py
复制代码
import socket
x=2
def say_hi():
    print("say hi from my mod")
复制代码

main.pyのコードは次のとおりです

import my_mod as mod

print(mod.x)
print(mod.socket.gethostname())
复制代码

したがって、my_modをmain.py asにインポートしてから、ソケットモジュールをmy_modファイルにインポートします。これはmod.socketを介してインポートできます。

server
---app.py
复制代码

ここでは、ターミナルに出力されるapp.pyにステートメントを1つだけ追加します。

print("running app")
复制代码

Pythonでは、ディレクトリ内の指定されたファイルを検索して実行できます。Pythonインタープリターは、Pythonモジュールファイルを実行するためのモジュール名を指定できる-mパラメーターため、サーバーフォルダーでapp.pyファイルを実行できます。次のステートメントを介して。

python -m server.app
复制代码

Pythonはsys.pathパス

次のように、サーバーの下でapp.pyの名前を変更することもでき__main__.pyます

server
---__main__.py
复制代码

このように、サーバーパッケージの下のファイルは、python -m serverステートメント実行できます。もちろん、サーバーパッケージに1つと2つのファイルを同時に作成することもできます。__main__.py__init__.py__main__.py

おすすめ

転載: juejin.im/post/7082654440653586439