ホームページ バックエンド開発 Python チュートリアル Pythonのパッケージとは何ですか?効果は何ですか? Python のパッケージの紹介

Pythonのパッケージとは何ですか?効果は何ですか? Python のパッケージの紹介

Nov 20, 2018 pm 04:10 PM
パイソン

この記事では、Python のパッケージとは何ですか?効果は何ですか? Python でのパッケージの紹介はある程度の参考になるので、困っている友達は参考にしていただければ幸いです。

1. パッケージとは何ですか?

パッケージとは、Python モジュールの名前空間を「.モジュール名」で整理する方法です。

#ただし、python2 で指定されていることに注意してください。パッケージ内に __init__.py ファイルが存在する必要があります。

目的パッケージの作成は実行することではなく、インポートして使用することです。パッケージは単なる形式であり、パッケージの本質はモジュールです。

2. パッケージの役割は何ですか?

パッケージ 本質的にはフォルダーであるため、フォルダーの唯一の機能はファイルを整理することです。関数が増えるにつれて、

#すべての関数を 1 つのフォルダーに入れることはできなくなります。モジュールを組織機能に使用します。モジュールが増えるにつれて、プログラムの構造と保守性を向上させるために、フォルダーを使用してモジュール ファイルを整理する必要があります。

次へ 後で学習するためにいくつかのパッケージを作成します。パッケージは簡単です。必要なのは __init__.py を含むフォルダーだけです。

import os
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
l = []
l.append(open('glance/__init__.py','w'))
l.append(open('glance/api/__init__.py','w'))
l.append(open('glance/api/policy.py','w'))
l.append(open('glance/api/versions.py','w'))
l.append(open('glance/cmd/__init__.py','w'))
l.append(open('glance/cmd/manage.py','w'))
l.append(open('glance/db/__init__.py','w'))
l.append(open('glance/db/models.py','w'))
map(lambda f:f.close() ,l)
ログイン後にコピー

ディレクトリ構造を作成します

各フォルダーにいくつかのメソッドを追加します。
#policy.py
def get():
    print('from policy.py')
    
#versions.py
def create_resource(conf):
    print('from version.py: ',conf)
    
#manage.py
def main():
    print('from manage.py')
    
#models.py
def register_models(engine):
    print('from models.py: ',engine)
ログイン後にコピー

test.py でパッケージの内容を使用でき、パッケージをインポートするときに import または from xxx を使用できます。インポートの形式 xxx

import glance.db.models
glance.db.models.register_models('mysql')
from glance.api.policy import get
get()
ログイン後にコピー

ただし、次の形式に注意してください。 from xxx import xxx の「ドット」はインポート後に表示できません。つまり、from a.b import c は OK です。

しかし from a import b.c は間違っています

3 __init__.py は何をしますか?

パッケージのインポートにどの方法を使用しても、それが初めてインポートされる限り、パッケージまたはパッケージの他の部分が最初にインポートされます。 __init__.py ファイルを実行します。

このファイルは空でも構いませんが、初期化コードを保存することもできます。

以前に使用した Can from xxx import * be used in package call?

はい、__init__.py ファイルに __all__ を指定して * インポートされたコンテンツを決定する必要があります。

print("我是glance的__init__.py⽂件. ")
x = 10
def hehe():
    print("我是呵呵")
    
def haha():
    print("我是哈哈")
__all__ = ['x', "hehe"]
ログイン後にコピー

test.py

from glance import *
print(x) # OK
hehe() # OK
haha() # 报错. __all__⾥没有这个⻤东⻄
ログイン後にコピー

4. 相対インポートと絶対インポート

最終パッケージの Glance は他の人が使用できるように書かれており、Glance パッケージ内での相互インポートも行われます。現時点では、絶対インポートと相対インポートの 2 つのインポート方法があります。

1). 絶対インポート: 開始点として目で見る

2). 相対インポート: 使用. または. 開始点として

たとえば、glance/cmd/manage.py を使用します。 Inlance/api/version.py

# 在glance/api/version.py
#绝对导⼊
from glance.cmd import manage
manage.main()
#相对导⼊
# 这种情形不可以在versions中启动程序.
# attempted relative import beyond top-level package
from ..cmd import manage
manage.main()
ログイン後にコピー

テスト時に注意する必要があるのは、Python パッケージのパスが実行中のスクリプトが配置されているディレクトリと同じであることです。

Python では、実行するプログラムは、現在のパッケージのスコープを超えることはできません (相対インポート)。

絶対インポートを使用する場合、そのような問題はありません。つまり、パッケージで相対インポートを使用する場合、パッケージ内の情報を使用する場合、パッケージの外部でのみインポートできます。

# 在policy.py
import versions
ログイン後にコピー

プログラムのエントリがポリシーの場合、この時点ではプログラムに問題はありません。

理由は、ポリシー設定時に外部からアクセスするとエラーが発生するためです。 , .sys.path のパスが外部にあるため、versions モジュールを直接見つけることができません。したがって、必ずエラーが報告されます:

ModuleNotFoundError: No module named 'versions'
ログイン後にコピー
インポート中にエラーが発生した場合パッケージについては、まず sys.path を確認してください。本当にパッケージ情報を取得できるかどうかを確認してください。5. パッケージを個別にインポートします
# 在test.py中
import glance
ログイン後にコピー
インポートされたグランスでは、現時点では何もできません. なぜなら、一見すると __init__.py にはサブパッケージの読み込みがありません。この時点で、サブパッケージの内容をそれぞれ __init__.py に導入する必要があります。

1. 相対パスを使用する

2.

パッケージへの絶対パスを使用する場合の注意:

パッケージに関連するインポート ステートメントも import および from xxx import xxx ですが、どちらを使用しても、どこにあるとしても、インポートするときは 1 つの原則に従う必要があります: ドットを含むインポートでは、

ドットの左側がパッケージである必要があります。そうでない場合は、エラーが報告されます。一連のドット例: from a.b.c import d

以上がPythonのパッケージとは何ですか?効果は何ですか? Python のパッケージの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

See all articles