Python 라이브러리: 작성, 패키징 및 배포에 대한 종합 가이드

WBOY
풀어 주다: 2023-09-03 17:37:01
원래의
1000명이 탐색했습니다.

Python은 훌륭한 프로그래밍 언어이지만 패키징은 가장 약한 점 중 하나입니다. 이는 사회에서도 널리 알려진 사실이다. 패키지를 설치하고 가져오고 사용하고 생성하는 과정은 수년에 걸쳐 많이 개선되었지만 여전히 Python과 다른 성숙한 언어의 어려움에서 많은 것을 배운 Go 및 Rust와 같은 새로운 언어와 비교할 수는 없습니다. 언어.

이 튜토리얼에서는 자신만의 패키지 작성, 패키징 및 배포에 대해 알아야 할 모든 것을 배우게 됩니다.

Python 라이브러리 작성 방법

Python 라이브러리는 Python 패키지로 구성된 Python 모듈의 일관된 모음입니다. 일반적으로 이는 모든 모듈이 동일한 디렉터리에 있고 해당 디렉터리가 Python 검색 경로에 있음을 의미합니다.

작은 Python 3 패키지를 빠르게 작성하고 이러한 모든 개념을 설명해 보겠습니다.

병리학 키트

Python 3은 뛰어난 Path 对象,这相对于 Python 2 笨拙的 os.path 모듈을 통해 크게 개선되었습니다. 그러나 현재 스크립트의 경로를 찾는 주요 기능 중 하나가 누락되었습니다. 이는 현재 스크립트를 기준으로 액세스 파일의 위치를 ​​지정하려는 경우 중요합니다.

스크립트는 어디에나 설치할 수 있는 경우가 많아 절대경로를 사용할 수 없으며, 작업 디렉터리는 임의의 값으로 설정할 수 있으므로 상대경로를 사용할 수 없습니다. 하위 디렉터리나 상위 디렉터리에 있는 파일에 액세스하려면 현재 스크립트 디렉터리를 찾을 수 있어야 합니다.

Python에서 수행하는 방법은 다음과 같습니다.

으아악

현재 스크립트 디렉터리의 "data" 하위 디렉터리에 있는 "file.txt"라는 파일에 액세스하려면 다음 코드를 사용할 수 있습니다. print(open(str(script_dir/' data/file.txt').read())

병리학 패키지에는 다음과 같이 사용할 수 있는 script_dir 메소드가 내장되어 있습니다.

으아악

네, 발음이 좀 어렵네요. 병리학 패키지는 매우 간단합니다. pathlib의 Path에서 자체 Path 클래스를 파생시키고 항상 호출 스크립트의 경로를 반환하는 정적 script_dir()을 추가합니다.

구현 내용은 다음과 같습니다.

으아악

pathlib.Path의 크로스 플랫폼 구현으로 인해 직접 파생할 수 있으며 특정 하위 클래스(PosixPath 또는 pathlib.Path的跨平台实现,您可以直接从它派生,并且必须从特定子类派生(PosixPath or WindowsPath)。 script_dir

WindowsPath). <code>script_dir 구문 분석에서는 검사 모듈을 사용하여 호출자와 해당 파일 이름 속성을 찾습니다.

검사 병리학 키트

일회성 스크립트 이상의 것을 작성할 때마다 테스트해야 합니다. 병리학 모듈도 예외는 아닙니다. 표준 단위 테스트 프레임워크를 사용한 테스트는 다음과 같습니다.

으아악

파이썬 경로

sys.path 中可用。这是我当前的 sys.pathPython 패키지를 Python 모듈에서 가져오려면 Python 검색 경로 어딘가에 설치해야 합니다. Python 검색 경로는 디렉터리 목록이며 항상

:

에서 찾을 수 있습니다. 으아악

출력의 첫 번째 빈 줄은 현재 디렉터리를 나타내므로 현재 작업 디렉터리가 무엇이든 상관없이 모듈을 가져올 수 있습니다. sys.path에 직접 디렉터리를 추가하거나 제거할 수 있습니다.

PYTHONPATH 环境变量,还有一些其他方法可以控制它。默认情况下包含标准 site-packagespip go를 통해 패키지를 설치하는 위치인

를 정의할 수도 있습니다.

Python 라이브러리를 패키징하는 방법

이제 코드와 테스트가 준비되었으므로 모든 것을 적절한 라이브러리에 패키징해 보겠습니다. Python은 설정 모듈을 통해 쉬운 방법을 제공합니다. 패키지의 루트 디렉터리에 setup.py

라는 파일을 만듭니다.

setup.pypackages 项的补充,该项使用从 setuptools 导入的 find_packages() 파일에는 작성자, 라이센스, 관리자 및 패키지에 대한 기타 정보와 같은 많은 메타데이터 정보가 포함되어 있습니다. 이것은 하위 패키지를 찾는

함수 쌍입니다.

이것은 병리학 패키지의 setup.py

파일입니다:

으아악

소스 배포 패키지

소스 배포는 패키지 배포에 사용되는 Python 패키지, 모듈 및 기타 파일(예: 버전 1, 버전 2 등)이 포함된 아카이브입니다. 파일이 배포되면 최종 사용자는 해당 파일을 다운로드하여 운영 체제에 설치할 수 있습니다.

python setup.py sdist소스 배포 패키지(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!