Python은 훌륭한 프로그래밍 언어이지만 패키징은 가장 약한 점 중 하나입니다. 이는 사회에서도 널리 알려진 사실이다. 패키지를 설치하고 가져오고 사용하고 생성하는 과정은 수년에 걸쳐 많이 개선되었지만 여전히 Python과 다른 성숙한 언어의 어려움에서 많은 것을 배운 Go 및 Rust와 같은 새로운 언어와 비교할 수는 없습니다. 언어.
이 튜토리얼에서는 자신만의 패키지 작성, 패키징 및 배포에 대해 알아야 할 모든 것을 배우게 됩니다.
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.path
Python 패키지를 Python 모듈에서 가져오려면 Python 검색 경로 어딘가에 설치해야 합니다. Python 검색 경로는 디렉터리 목록이며 항상
에서 찾을 수 있습니다. 으아악
출력의 첫 번째 빈 줄은 현재 디렉터리를 나타내므로 현재 작업 디렉터리가 무엇이든 상관없이 모듈을 가져올 수 있습니다. sys.path에 직접 디렉터리를 추가하거나 제거할 수 있습니다.
PYTHONPATH
环境变量,还有一些其他方法可以控制它。默认情况下包含标准 site-packages
pip go를 통해 패키지를 설치하는 위치인
이제 코드와 테스트가 준비되었으므로 모든 것을 적절한 라이브러리에 패키징해 보겠습니다. 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 有一个名为 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!