目次
Python ライブラリの作成方法
病理学パッケージ
sys.path
setup.py
二进制分发
如何分发 Python 包
升级您的 pip 版本
创建帐户
注册您的包裹
上传您的包
结论
ホームページ バックエンド開発 Python チュートリアル Python ライブラリ: 作成、パッケージ化、配布のための包括的なガイド

Python ライブラリ: 作成、パッケージ化、配布のための包括的なガイド

Sep 03, 2023 pm 05:37 PM

Python は優れたプログラミング言語ですが、パッケージ化が最も弱い点の 1 つです。これは社会では周知の事実です。パッケージのインストール、インポート、使用、作成のプロセスは長年にわたって大幅に改善されてきましたが、それでも、Python やその他の成熟した言語の苦労から多くを学んだ Go や Rust などの新しい言語とは比較できません。言語。

このチュートリアルでは、独自のパッケージの作成、パッケージ化、配布について知っておくべきことをすべて学びます。

Python ライブラリの作成方法

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 パッケージを使用すると、次のように使用できる組み込みの

script_dir

メソッドがあります: リーリー はい、発音が少し難しいです。病理パッケージは非常にシンプルです。 pathlib の Path から独自の Path クラスを派生し、呼び出し元のスクリプトのパスを常に返す静的な

script_dir()

を追加します。 実装は次のとおりです:

リーリー

pathlib.Path

はクロスプラットフォーム実装であるため、そこから直接派生できますが、特定のサブクラス (PosixPath または #) から派生する必要があります。 ## WindowsPath)。 script_dir 解析では、検査モジュールを使用して呼び出し元とそのファイル名属性を見つけます。 病理検査パッケージ

1 回限りのスクリプト以上のものを作成するときは、必ずテストする必要があります。病理学モジュールも例外ではありません。標準の単体テスト フレームワークを使用したテストは次のとおりです:

リーリー

Python パス

Python パッケージは、Python モジュールによってインポートされるように、Python 検索パス上のどこかにインストールする必要があります。 Python 検索パスはディレクトリのリストであり、

sys.path

で常に使用できます。これは現在の

sys.path: です。 リーリー 出力の最初の空行は現在のディレクトリを表すため、現在の作業ディレクトリが何であっても、そこからモジュールをインポートできることに注意してください。ディレクトリを sys.path に直接追加または削除できます。

PYTHONPATH

環境変数を定義することもできます。これを制御する方法は他にもいくつかあります。標準の

site-packages はデフォルトで含まれており、pip go 経由でパッケージをインストールします。 Python ライブラリをパッケージ化する方法

コードとテストを用意したので、それをすべて適切なライブラリにパッケージ化しましょう。 Python では、セットアップ モジュールを使用する簡単な方法が提供されます。パッケージのルート ディレクトリに

setup.py

という名前のファイルを作成します。

setup.py

このファイルには、作成者、ライセンス、管理者、パッケージに関するその他の情報など、多くのメタデータ情報が含まれています。これは、

setuptools からインポートされた find_packages() 関数を使用してサブパッケージを検索する packages エントリに追加されたものです。 これは、病理学パッケージの setup.py

ファイルです:

リーリー ソース配布パッケージ

ソース配布パッケージとは、Python パッケージ、モジュール、およびパッケージ配布に使用されるその他のファイル (バージョン 1、バージョン 2 など) を含むアーカイブ ファイルを指します。ファイルが配布されると、エンド ユーザーはそのファイルをダウンロードしてオペレーティング システムにインストールできます。

ソース配布パッケージ (sdist) を作成するには、次を実行します:

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 包

Python 有一个名为 PyPI(Python 包索引)的中央包存储库。 PyPI 可以轻松管理不同版本的包。例如,如果用户需要安装特定的软件包版本,pip 知道在哪里查找它。

当您使用 pip 安装 Python 包时,它将从 PyPI 下载该包(除非您指定不同的存储库)。为了分发我们的病理包,我们需要将其上传到 PyPI 并提供 PyPI 所需的一些额外元数据。步骤是:

  • 升级您的 pip 版本。
  • 在 PyPI 上创建一个帐户(只需一次)。
  • 注册您的包裹。
  • 上传您的包。

升级您的 pip 版本

确保您的操作系统中安装了最新版本的 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 官方网站上提供,如下所示。

Python 库:编写、打包和分发的综合指南

要使用 pip 安装它,只需发出以下命令:

pip install pathology
ログイン後にコピー

要更深入地了解分发包的主题,请查看如何共享您的 Python 包。

结论

在本教程中,我们完成了编写 Python 库、打包并通过 PyPI 分发它的完整过程。此时,您应该拥有编写库并与世界共享库的所有工具。

本文已根据 Esther Vaati 的贡献进行了更新。 Esther 是 Envato Tuts+ 的软件开发人员和作家。

以上が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時間しかない場合、何を教えることを選びますか...

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

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

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

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

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

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

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

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

See all articles