Python は優れたプログラミング言語ですが、パッケージ化が最も弱い点の 1 つです。これは社会では周知の事実です。パッケージのインストール、インポート、使用、作成のプロセスは長年にわたって大幅に改善されてきましたが、それでも、Python やその他の成熟した言語の苦労から多くを学んだ Go や Rust などの新しい言語とは比較できません。言語。
このチュートリアルでは、独自のパッケージの作成、パッケージ化、配布について知っておくべきことをすべて学びます。
Python ライブラリは、Python パッケージに編成された Python モジュールの一貫したコレクションです。一般に、これはすべてのモジュールが同じディレクトリにあり、そのディレクトリが Python 検索パス上にあることを意味します。
小さな Python 3 パッケージを簡単に作成して、これらすべての概念を説明しましょう。
Python 3 には優れた Path
オブジェクトがあり、Python 2 の不器用な os.path
モジュールに比べて大幅に改善されています。ただし、現在のスクリプトへのパスを見つけるという重要な機能が 1 つ欠けています。これは、現在のスクリプトに対して相対的にアクセス ファイルを配置する場合に重要です。
多くの場合、スクリプトはどこにでもインストールできるため、絶対パスは使用できません。また、作業ディレクトリは任意の値に設定できるため、相対パスは使用できません。サブディレクトリまたは親ディレクトリ内のファイルにアクセスする場合は、現在のスクリプト ディレクトリを見つけられる必要があります。
Python で行う方法は次のとおりです:
リーリー現在のスクリプト ディレクトリの "data" サブディレクトリにある "file.txt" という名前のファイルにアクセスするには、次のコードを使用できます。 print(open(str(script_dir/' data/file.txt' )。 読む())######
pathology パッケージを使用すると、次のように使用できる組み込みの
メソッドがあります: リーリー はい、発音が少し難しいです。病理パッケージは非常にシンプルです。 pathlib の Path から独自の Path クラスを派生し、呼び出し元のスクリプトのパスを常に返す静的な
script_dir()を追加します。 実装は次のとおりです:
リーリーpathlib.Path
はクロスプラットフォーム実装であるため、そこから直接派生できますが、特定のサブクラス (PosixPath
または
#) から派生する必要があります。 ## WindowsPath)。 script_dir 解析では、検査モジュールを使用して呼び出し元とそのファイル名属性を見つけます。
病理検査パッケージ
Python パッケージは、Python モジュールによってインポートされるように、Python 検索パス上のどこかにインストールする必要があります。 Python 検索パスはディレクトリのリストであり、
sys.path:
です。
リーリー
出力の最初の空行は現在のディレクトリを表すため、現在の作業ディレクトリが何であっても、そこからモジュールをインポートできることに注意してください。ディレクトリを sys.path に直接追加または削除できます。
PYTHONPATH
環境変数を定義することもできます。これを制御する方法は他にもいくつかあります。標準のsite-packages はデフォルトで含まれており、pip go 経由でパッケージをインストールします。
Python ライブラリをパッケージ化する方法
setup.py
このファイルには、作成者、ライセンス、管理者、パッケージに関するその他の情報など、多くのメタデータ情報が含まれています。これは、setuptools からインポートされた find_packages() 関数を使用してサブパッケージを検索する
packages エントリに追加されたものです。
これは、病理学パッケージの
setup.py
リーリー ソース配布パッケージ
ソース配布パッケージとは、Python パッケージ、モジュール、およびパッケージ配布に使用されるその他のファイル (バージョン 1、バージョン 2 など) を含むアーカイブ ファイルを指します。ファイルが配布されると、エンド ユーザーはそのファイルをダウンロードしてオペレーティング システムにインストールできます。python setup.py sdist
ソースコード配布を構築しましょう:
リーリー
README.md
ファイルを使用したためです。無視しても安全です。上記のコマンドは、現在のオペレーティング システムのデフォルト形式でアーカイブ ファイルを作成します。 Unix システムの場合、gzip 圧縮された tar ファイルがdist ディレクトリに生成されます: リーリー Windows を使用している場合は、zip ファイルが生成されます。
以下に示すように形式オプションを使用して、他の追加のファイル形式を指定することもできます。
python setup.py sdist --formats=gztar,zip
例如,上述命令将生成一个 gzip 压缩的 tarball 和一个 zip 文件。
可用的不同格式有:
zip
: .zip
gztar
: .tar.gz
bztar
: .tar.bz2
xztar
: .tar.xz
ztar
: .tar.Z
tar
: .tar
要创建一个名为“wheel”的二进制发行版,请运行: python setup.py bdist_wheel
这是一个二进制发行版:
$ python setup.py bdist_wheel running bdist_wheel running build running build_py creating build creating build/lib creating build/lib/pathology copying pathology/__init__.py -> build/lib/pathology copying pathology/path.py -> build/lib/pathology installing to build/bdist.macosx-10.7-x86_64/wheel running install running install_lib creating build/bdist.macosx-10.7-x86_64 creating build/bdist.macosx-10.7-x86_64/wheel creating build/bdist.macosx-10.7-x86_64/wheel/pathology copying build/lib/pathology/__init__.py -> build/bdist.macosx-10.7-x86_64/wheel/pathology copying build/lib/pathology/path.py -> build/bdist.macosx-10.7-x86_64/wheel/pathology running install_egg_info running egg_info writing pathology.egg-info/PKG-INFO writing dependency_links to pathology.egg-info/dependency_links.txt writing top-level names to pathology.egg-info/top_level.txt reading manifest file 'pathology.egg-info/SOURCES.txt' writing manifest file 'pathology.egg-info/SOURCES.txt' Copying pathology.egg-info to build/bdist.macosx-10.7-x86_64/wheel/pathology-0.1-py3.6.egg-info running install_scripts creating build/bdist.macosx-10.7-x86_64/wheel/pathology-0.1.dist-info/WHEEL
病理包仅包含纯Python模块,因此可以构建通用包。如果您的软件包包含 C 扩展,则必须为每个平台构建单独的轮子:
$ ls -la dist total 16 drwxr-xr-x 4 gigi.sayfan gigi.sayfan 136 Apr 18 21:24 . drwxr-xr-x 13 gigi.sayfan gigi.sayfan 442 Apr 18 21:24 .. -rw-r--r-- 1 gigi.sayfan gigi.sayfan 2695 Apr 18 21:24 pathology-0.1-py3-none-any.whl -rw-r--r-- 1 gigi.sayfan gigi.sayfan 1223 Apr 18 21:20 pathology-0.1.tar.gz
要更深入地了解打包 Python 库的主题,请查看如何编写您自己的 Python 包。
Python 有一个名为 PyPI(Python 包索引)的中央包存储库。 PyPI 可以轻松管理不同版本的包。例如,如果用户需要安装特定的软件包版本,pip 知道在哪里查找它。
当您使用 pip 安装 Python 包时,它将从 PyPI 下载该包(除非您指定不同的存储库)。为了分发我们的病理包,我们需要将其上传到 PyPI 并提供 PyPI 所需的一些额外元数据。步骤是:
确保您的操作系统中安装了最新版本的 pip。要升级 pip,请发出以下命令
python3 -m pip install --upgrade pip
您可以在 PyPI 网站上创建帐户。然后在您的主目录中创建一个 .pypirc 文件:
[distutils] index-servers=pypi [pypi] repository = https://pypi.python.org/pypi username = the_gigi
出于测试目的,您可以将 pypitest
索引服务器添加到您的 .pypirc 文件中:
[distutils] index-servers= pypi pypitest [pypitest] repository = https://testpypi.python.org/pypi username = the_gigi [pypi] repository = https://pypi.python.org/pypi username = the_gigi
如果这是您的软件包的第一个版本,您需要使用 PyPI 注册它。使用setup.py的注册命令。它会询问您的密码。请注意,我将其指向此处的测试存储库:
$ python setup.py register -r pypitest running register running egg_info writing pathology.egg-info/PKG-INFO writing dependency_links to pathology.egg-info/dependency_links.txt writing top-level names to pathology.egg-info/top_level.txt reading manifest file 'pathology.egg-info/SOURCES.txt' writing manifest file 'pathology.egg-info/SOURCES.txt' running check Password: Registering pathology to https://testpypi.python.org/pypi Server response (200): OK
现在包已注册,我们可以上传它了。我建议使用麻线,这样更安全。像往常一样使用 pip install twine
安装它。然后使用 twine 上传您的包并提供您的密码(在下面进行编辑):
$ twine upload -r pypitest -p <redacted> dist/* Uploading distributions to https://testpypi.python.org/pypi Uploading pathology-0.1-py3-none-any.whl [================================] 5679/5679 - 00:00:02 Uploading pathology-0.1.tar.gz [================================] 4185/4185 - 00:00:01
该软件包现已在 PyPI 官方网站上提供,如下所示。
要使用 pip 安装它,只需发出以下命令:
pip install pathology
要更深入地了解分发包的主题,请查看如何共享您的 Python 包。
在本教程中,我们完成了编写 Python 库、打包并通过 PyPI 分发它的完整过程。此时,您应该拥有编写库并与世界共享库的所有工具。
本文已根据 Esther Vaati 的贡献进行了更新。 Esther 是 Envato Tuts+ 的软件开发人员和作家。
以上がPython ライブラリ: 作成、パッケージ化、配布のための包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。