Python 3快速入門(四)——Pythonパッケージ管理


Python 3快速入門(四)——Pythonパッケージ管理
一、Pythonパッケージの概要
1、バッグ
Pythonではパケット管理モジュールを用いるが、パケットは通常1つのディレクトリに対応し、ディレクトリの下にinitを作成しなければならない.pyモジュール、init.pyモジュールのモジュール名はパッケージ名であり、Pythonはディレクトリをパッケージに解析します.init.pyファイル内では初期化パケットの内容を定義し、パケットの内容をインポートし、パケット内モジュールのエクスポートを制限できます.init.pyファイルは、空でもモジュールでも、モジュール名がパッケージ名でも構いません.パッケージまたはパッケージのモジュール、変数、関数をインポートする場合init.pyファイルは自動的に実行されます.
2、モジュール
Pythonの1つですpyファイルはモジュールです.Pythonでimportかfromで...importで対応するモジュールをインポートします.モジュール全体(somemodule)をインポートします.形式は:import somemoduleあるモジュールから関数または変数をインポートします.形式は:from somemodule import somefunctionあるモジュールから複数の関数をインポートします.形式は:from somemodule import firstfunc,secondfunc,thirdfuncあるモジュールのすべての関数または変数をインポートします.形式は: from somemodule import *です.
import sys
print('================Python import module==========================')
print('      :')
for i in sys.argv:
    print(i)
print("python    ", sys.path)

from sys import argv, path  #        

print('================python from import===================================')
print(argv)
print(path)

インポートモジュールの名前を変更するImport package.module as nameimportパッケージまたはモジュールをインポートする場合、インポートモジュールが多い場合は改行する必要がある場合は、スラッシュを使用するか、カッコを使用してすべてのモジュールを含めることができます.パッケージとモジュールは重複してインポートされません.
3、モジュールの内蔵変数
モジュール内部には、組み込み変数:name:現在のモジュール名package:現在のモジュールが属するパッケージの名前doc:現在のモジュールのコメント内容file:現在のファイル
# -*- coding:utf-8 -*-
print("name: " + __name__)
print("package: " + (__package__ or "          "))
print("doc: " + (__doc__ or "          "))
print("file: " + __file__)
# name: __main__
# package:           
# doc:           
# file: test.py

ファイルがエントリファイルとして扱われる場合、内蔵変数packageに値がなく、name値がmain、doc、file値がファイル名(パスを含まない)になります.各モジュールは任意にインデントのないコードを書くことができ、ロード時に自動的に実行され、モジュールがメイン実行ファイルであるか呼び出されたモジュールファイルであるかを区別するために、Pythonは変数nameを導入し、ファイルが呼び出された場合、nameの値はモジュール名であり、ファイルがエントリとして実行された場合、nameは「main」である.そのため、各モジュールにテストコードを書くことができ、テストコードはPythonによって直接実行される場合にのみ実行され、コードとテストを組み合わせて、テスト駆動開発(TDD)のサポートを完璧に実現することができる.
if __name__ == "__main__":
    function_name()

モジュールファイルをアプリケーションではなくモジュールとして実行するコマンドは、次のとおりです.python3 -m package.module二、Pythonパッケージ管理
1.パッケージとモジュールのインポート
importはパッケージとモジュールのみをインポートでき、変数や関数を直接インポートすることはできません.多層パッケージがネストされている場合、インポート名が長すぎるため、名前を変更できます.
import package1.package2.module_name
import package1
import package1.module_name
import package1.package2.module_name as new_name

パッケージとモジュールをインポートする場合は、ループインポートを避ける必要があります.2つ以上のモジュールファイルが互いにインポートされるとエラーが発生します.Pythonはモジュールをインポートするとモジュール内のすべてのコンテンツを実行しますが、複数回インポートすると1回しか実行されません.Importがパッケージまたはモジュールをインポートする場合、Pythonインタプリタが探すモジュールの優先度は以下の通りである:A、現在のディレクトリB、環境変数PYTHONPATHC、sys.Path(listタイプ)モジュールは、インポート実行時にPythonインタプリタがプログラムの起動速度を速めるため、モジュールファイルと同じディレクトリで自動的に生成する.pycファイル,.pycはコンパイルされたバイトコードです.Pythonはインデント整列組織コードの実行を使用し、インデントされていないすべてのコード(関数定義やクラス定義ではない)は、ロード時に自動的に実行されます.
2、変数と関数のインポート
モジュールの変数をインポートし、カンマで区切られた複数のfrom package1.package2.module_name import variable_nameモジュールをインポートする関数、カンマ区切りfrom package1.package2.module_name import function_nameを使用してパッケージをインポートする複数のモジュール、カンマ区切りfrom package1 import module_nameを使用してモジュールをインポートするすべての変数および関数from package1.module_name import *を使用して、モジュール内で組み込みall属性を使用して、モジュールがエクスポートできる変数または関数を指定します.外部インポートでは、指定した変数または関数のみが使用できます.モジュール(*.py)でallリストのクラス、関数、変数などのメンバーをエクスポートします.そうしないと、下線で始まる(プライベート)メンバーはすべてエクスポートされます.モジュールでallプロパティを使用すると、相互参照時の名前の競合を回避できます.
#!/usr/bin/python3

__all__ = ["variable1", "variable2", "function_name1", "function_name2"]

variable1 = 0
variable2 = 0

def function_name1(args):
    pass

def function_name2(args):
    pass

変数と関数をインポートするときに、変数と関数が多すぎて改行する必要がある場合は、逆スラッシュ改行またはカッコを使用して複数の変数または関数を修飾できます.
from package1.module_name import variable1, variable2 \
    variable3, function_name1

from package1.module_name import (variable1, variable2, 
                                  function_name2, function_name2)

3、トップクラスのパッケージ
トップクラスのパッケージとエントリファイルmain.pyの位置はmain.py同級のパッケージはトップクラスのパッケージなのでmain.pyエントリファイルはパッケージに属しません.
4、相対導入
相対インポートは、モジュールのインポート時にインポートされるモジュール名を指定する相対パスです.importは相対インポートをサポートしておらずfromしか使用できません...import ... フォーマットは相対インポートを実現し、“..........”を参照してください.ポータルファイルにはパッケージの概念がないため、相対インポートは使用できません.「≪相対インポート|Relative Import|emdw≫」を使用してトップ・パッケージを超えないようにします.また、インポート・ファイルの同じクラスのパッケージでは、相対インポートは使用できません.メールでpyモジュールとして実行する場合、相対インポートを使用できます.この場合、python3 -m main.pyというコマンドを使用して実行します.
5、絶対インポート
絶対インポートはインポート時にトップクラスのパッケージからインポートされるモジュール名への完全なパスを指定する必要があります.importとfromを使用できます...import ...を作成します.
6、init.pyモジュール
init.pyファイルはパケットのルートディレクトリに存在する、パケットまたはパケット内の任意のモジュールまたはモジュール内の変数、関数がインポートされるとinit.pyの内容はまず自動的に実行されます.だから、init.pyファイルは、A、本パッケージを制限モジュールのinitへのインポートを実現することができる.pyに内蔵関数allを書き込み、外部にインポートできるモジュールを決定します.__all__ = ["module_name1", "module_name2"] B、一括インポートパッケージ内の複数のモジュールファイルが一部のモジュールファイルに使用する必要がある場合、パッケージのinit.pyファイルに必要なモジュールファイルをインポートし、このパッケージの異なるモジュールファイルでインポートしたモジュールを直接使用できます.
三、Pythonプロジェクト構造
1、Pythonファイル構造
通常、Pythonのファイル構造は以下の通りです.
#!/usr/bin/python3

#     
"""
    This is an example.
"""

#     
import sys
import os

#       
debug = True

#    
class class_name:
    pass

#     
def function_name():
    pass

#    
if __name__ == "__main__":
    function_name()

2、Pythonプロジェクトディレクトリ構造
通常、Pythonプロジェクトのディレクトリ構造は以下の通りである:README:プロジェクト説明ドキュメント.bin(scripts):プロジェクトの実行可能スクリプトを格納します.project_name:プロジェクトのすべてのソースコードを格納し、プログラムのエントリファイルはmainと命名することが望ましい.py.docs:プロジェクトドキュメントを保存します.tests:コードディレクトリをテストします.extras:プロジェクト拡張部分、プロジェクトに必要な部分ではなく、プロジェクトに関連するsample、pocを格納します.通常、サブディレクトリは次のdev_example、production_example、test1_poc、test2_poc.setup.py:プロジェクトのインストール、導入、パッケージングのスクリプト.requirements.txt:ソフトウェア依存の外部Pythonパッケージリストを格納します.README:項目説明書.LICENSE.txt:著作権声明ChangeLog.txt:バージョン変更ログAUTHEORS:作成者リストINSTALL:インストール説明MANIFEST.in:梱包リストファイルMAKEFILE:コンパイルスクリプト
四、pipenvパッケージ管理ツール
1、pipenvの概要
Pythonプロジェクトの開発では,開発ニーズが完了してテストされた後,正式なサーバに公開する必要があり,環境依存の問題に直面する.Pythonプロジェクトには、複数のサードパーティ製モジュールパッケージがあり、バージョン制約の問題がある可能性があるため、サーバと同じ環境をシミュレートする仮想環境が必要です.pipenvは、Python Development Workflow for Humansと呼ばれ、開発プロジェクトの仮想環境を自動的に作成および管理し、Pythonパッケージを管理することを目的としています.virtualenvとpipの集合であり、pythonバージョンを指定した仮想環境とインストール依存パッケージを作成することで、各プロジェクトから隔離された開発環境を提供します.
2、pipenv取付
Python 3の場合、インストールコマンドは次のとおりです:pip 3 install pipenvインストール結果表示:pipenv–version
3、pipenv常用コマンド
pipenv --threepipenv -- twopipenv --python 3.x.xpipenv --python 2.x.x仮想環境を作成し、Pythonバージョンpipenv shellをシステム環境から仮想環境に切り替えることを指定pipenv install xxxx仮想環境インストールパッケージexitで仮想環境pipenv uninstall[module_name]を終了するPythonパッケージpipenv--rmを削除仮想環境pipenv--whereローカルエンジニアリングパスpipenv--venv仮想環境パスpipenv--py仮想環境のPython実行可能ファイルpipenv install仮想環境pipenv install[moduel]インストールパッケージpipenv install[moduel]--devインストールパッケージ開発環境pipenv uninstall[module]アンインストールパッケージpipenv graph表示パッケージ依存pipenv lock生成lockfilepipenv run python[pyfile]実行pyファイルpipenv uninstall--allすべてのパッケージをアンインストールしてPipfileから削除
4、交換元
pipenvのデフォルトのPipfileファイルでは、公式ソースのロック依存を使用することを指定しています.速度が遅すぎるため、ソリューションは自然に国内ソースを交換します.よく使われる国内ソースは以下の通りです.アリクラウド:http://mirrors.aliyun.com/pypi/simple/清華大学:https://pypi.tuna.tsinghua.edu.cn/simple/中国科学技術大学:https://pypi.mirrors.ustc.edu.cn/simple/ソース交換はPipfileファイルのurlの値を国内ソースに置き換える必要があります.
[[source]]
name = "pypi"
url = "http://mirrors.aliyun.com/pypi/simple/ "
verify_ssl = true

[dev-packages]

[packages]
pymysql = "*"
pymango = "*"
mysql-connector = "*"
mysqldb = "*"
mysql-python = "*"

[requires]
python_version = "3.7"