> 백엔드 개발 > 파이썬 튜토리얼 > 4가지 Python 프로젝트 관리 및 구축 도구, 추천 모음!

4가지 Python 프로젝트 관리 및 구축 도구, 추천 모음!

WBOY
풀어 주다: 2023-04-12 22:52:05
앞으로
1481명이 탐색했습니다.

4가지 Python 프로젝트 관리 및 구축 도구, 추천 모음!

Python은 오랫동안 사실상의 표준 프로젝트 관리 및 구축 도구가 없었기 때문에 Python 프로젝트 구조와 구축 방법이 다양해졌습니다. 이는 Python의 자유 의지를 반영할 수 있습니다.

초기 수동 구축을 거친 Java와 달리 반자동 Ant, Maven을 거쳐 기본적으로 사실상의 표준입니다. 이 기간 동안 Maven은 다른 Gradle(주로 Android 프로젝트에서 추진), SBT(주로 Scala 프로젝트), Ant+Ivy, Buildr 등의 도전도 받아들였지만 세계에서 Maven의 위상을 흔들기는 어려웠으며, Maven의 디렉토리 레이아웃을 거의 따랐습니다.

Python에는 pip, Pipenv, conda와 같은 패키지 관리 도구가 있었지만 프로젝트의 디렉터리 레이아웃에 대한 합의가 없었습니다.

빌드의 많은 측면은 여전히 ​​전통적인 Makefile 방법을 따르고, setup.py 및 build.py를 추가하여 프로그램 코드를 사용하여 설치하고 빌드합니다. 프로젝트 디렉토리 레이아웃과 관련하여 일부는 프로젝트 템플릿을 만든 다음 프로젝트 템플릿을 적용하는 도구를 만듭니다.

다음은 네 가지 도구의 사용에 대한 간략한 개요입니다.

  1. CookieCutter
  2. PyScaffold
  3. PyBuilder
  4. Poetry

CookieCutter 고전적인 Python 프로젝트 디렉터리 구조

$ pip install cookiecutter
$ cookiecutter gh:audreyr/cookiecutter-pypackage
# 以 github 上的 audreyr/cookiecutter-pypackage 为模板,再回答一堆的问题生成一个 Python 项目
......
project_name [Python Boilerplate]: sample
......
로그인 후 복사

최종 생성자: cookiecutter 프로젝트 템플릿은 다음과 같습니다.

$ tree sample
sample
├── AUTHORS.rst
├── CONTRIBUTING.rst
├── HISTORY.rst
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.rst
├── docs
│ ├── Makefile
│ ├── authors.rst
│ ├── conf.py
│ ├── contributing.rst
│ ├── history.rst
│ ├── index.rst
│ ├── installation.rst
│ ├── make.bat
│ ├── readme.rst
│ └── usage.rst
├── requirements_dev.txt
├── sample
│ ├── __init__.py
│ ├── cli.py
│ └── sample.py
├── setup.cfg
├── setup.py
├── tests
│ ├── __init__.py
│ └── test_sample.py
└── tox.ini
3 directories, 26 files
로그인 후 복사

이것은 아마도 현재 널리 사용되는 디렉터리 구조의 기본 프레임워크일 것입니다. 주요 요소는 다음과 같습니다.

$ tree sample
sample
├── Makefile
├── README.rst
├── docs
│ └── index.rst
├── requirements.txt
├── sample
│ ├── __init__.py
│ └── sample.py
├── setup.cfg
├── setup.py
└── tests
 ├── __init__.py
 └── test_sample.py
로그인 후 복사

프로젝트 샘플 디렉터리는 샘플 디렉터리에 반복됩니다. 및 테스트 파일은 테스트 디렉터리에 배치됩니다. 문서용 docs 디렉터리, README.rst 및 기타 설정용 setup.cfg 및 Makefile 파일을 추가합니다.

이것은 실제로 매우 고전적인 Python 프로젝트 구조입니다. 다음 빌드에서는 make 명령을 사용하고 Makefile 파일에 정의된 지침을 볼 수 있습니다.

$ make
cleanremove all build, test, coverage and Python artifacts
clean-buildremove build artifacts
clean-pycremove Python file artifacts
clean-test remove test and coverage artifacts
lint check style
test run tests quickly with the default Python
test-all run tests on every Python version with tox
coverage check code coverage quickly with the default Python
docs generate Sphinx HTML documentation, including API docs
servedocscompile the docs watching for changes
releasepackage and upload a release
dist builds source and wheel package
installinstall the package to the active Python's site-packages
로그인 후 복사

위 빌드 프로세스를 사용하려면 tox, Wheel, Coverage, sphinx, flake8 등 해당 패키지를 설치해야 하며 모두 pip를 통해 설치할 수 있습니다. 그런 다음 테스트하고, 보도하고, 문서를 만들고, dist를 만드는 등의 작업을 수행할 수 있습니다. 그 중 make docs는 아름다운 웹 문서를 생성할 수 있습니다.

PyScaffold 프로젝트 생성

PyScaffold 이름에서 알 수 있듯이 Python 프로젝트용 스캐폴딩을 만드는 데 사용되는 도구입니다. 설치 및 사용:

$ pip install pyscaffold
$ putup sample
로그인 후 복사

Python 프로젝트는 다음과 같은 방식으로 생성됩니다. 이전에 cookiecutter가 선택한 템플릿은 샘플 디렉터리 대신 src 디렉터리에 소스 파일을 저장한다는 것입니다.

$ tree sample
sample
├── AUTHORS.rst
├── CHANGELOG.rst
├── CONTRIBUTING.rst
├── LICENSE.txt
├── README.rst
├── docs
│ ├── Makefile
│ ├── _static
│ ├── authors.rst
│ ├── changelog.rst
│ ├── conf.py
│ ├── contributing.rst
│ ├── index.rst
│ ├── license.rst
│ ├── readme.rst
│ └── requirements.txt
├── pyproject.toml
├── setup.cfg
├── setup.py
├── src
│ └── sample
│ ├── __init__.py
│ └── skeleton.py
├── tests
│ ├── conftest.py
│ └── test_skeleton.py
└── tox.ini
로그인 후 복사

Tox는 전체 프로젝트를 빌드하는 데 사용되는 도구입니다. tox는 빌드 프로세스 중에 Python 가상 환경을 생성하여 테스트 및 빌드를 위한 깔끔한 환경을 허용하는 자동화된 테스트 및 빌드 도구입니다.

tox -av는 tox.ini에 정의된 모든 작업을 표시할 수 있습니다.

$ tox -av
default environments:
default -> Invoke pytest to run automated tests
additional environments:
build -> Build the package in isolation according to PEP517, see https://github.com/pypa/build
clean -> Remove old distribution files and temporary build artifacts (./build and ./dist)
docs-> Invoke sphinx-build to build the docs
doctests-> Invoke sphinx-build to run doctests
linkcheck -> Check for broken links in the documentation
publish -> Publish the package you have been developing to a package index server. By default, it uses testpypi. If you really want to publish your package to be publicly accessible in PyPI, use the `-- --repository pypi` option.
로그인 후 복사

tox -e 빌드, tox -e docs 등을 사용하여 실행할 명령을 사용하세요

tox 명령을 사용하는 동안 매번 각 단계가 느린 것 같습니다. 가상 머신을 만드는 데 시간이 좀 걸릴 것 같습니다.

PyBuilder

PyBuilder가 생성하는 디렉터리 구조는 Maven과 매우 유사합니다. 살펴보겠습니다.

$ pip install pybuilder
$ mkdir sample && cd sample# 项目目录需手工创建
$ pyb --start-project# 回答一些问题后创建所需的目录和文件
로그인 후 복사

완료 후 디렉터리 구조를 살펴보세요.

$ tree sample
.
├── build.py
├── docs
├── pyproject.toml
├── setup.py
└── src
 ├── main
 │ ├── python
 │ └── scripts
 └── unittest
 └── python
로그인 후 복사

Building process pyb 명령을 계속 사용하면 pyb -h를 사용하여 도움말을 볼 수 있고 pyb -t를 사용하여 모든 작업을 나열할 수 있습니다. PyBuilder 작업은 플러그인 형식으로 추가되며 플러그인 구성은 빌드에 있습니다. py 파일.

$ pyb -t sample
Tasks found for project "sample":
 analyze -Execute analysis plugins.
 depends on tasks: prepare run_unit_tests
 clean - Cleans the generated output.
 compile_sources - Compiles source files that need compilation.
 depends on tasks: prepare
coverage - <no description available>
 depends on tasks: verify
 install - Installs the published project.
 depends on tasks: package publish(optional)
 package - Packages the application. Package a python application.
 depends on tasks: compile_sources run_unit_tests(optional)
 prepare - Prepares the project for building. Creates target VEnvs
 print_module_path - Print the module path.
print_scripts_path - Print the script path.
 publish - Publishes the project.
 depends on tasks: package verify(optional) coverage(optional)
 run_integration_tests - Runs integration tests on the packaged application.
 depends on tasks: package
run_unit_tests - Runs all unit tests. Runs unit tests based on Python's unittest module
 depends on tasks: compile_sources
upload - Upload a project to PyPi.
verify - Verifies the project and possibly integration tests.
 depends on tasks: run_integration_tests(optional)
$ pyb run_unit_tests sample
로그인 후 복사

PyBuilder는 빌드 또는 테스트 전에 가상 환경도 생성합니다. 버전 0.12.9부터는 --no-venvs 매개변수를 통해 가상 환경을 생성하는 단계를 건너뛸 수 있습니다. --no-venvs를 사용하면 Python 코드는 pyb를 실행하는 현재 Python 환경에서 실행되며 필요한 종속성을 수동으로 설치해야 합니다.

프로젝트의 종속성도 build.py 파일에 정의되어야 합니다.

@init
def set_properties(project):
 project.depends_on('boto3', '>=1.18.52')
 project.build_depends_on('mock')
로그인 후 복사

가상 환경을 생성하기 위해 pyb를 실행하면 위의 의존성이 설치되고, 그 안에서 테스트와 빌드가 실행됩니다.

Poetry

마지막 Poetry는 더 높은 프로젝트 활동을 갖춘 더 성숙한 Python 빌드라고 생각합니다. Poetry add boto3를 사용하여 종속성을 추가하고, poem show - -tree가 종속성 트리를 보여줍니다. . 프로젝트 설치 및 생성 방법을 살펴보세요

$ pip install poetry
$ poetry new sample
로그인 후 복사

생성하는 프로젝트는 위보다 간단합니다

$ tree sample
sample
├── README.rst
├── pyproject.toml
├── sample
│ └── __init__.py
└── tests
 ├── __init__.py
 └── test_sample.py
로그인 후 복사

--src 매개변수로 poem New를 주면 소스 파일 디렉토리 샘플이 src 디렉토리에 위치하게 됩니다 즉, Sample/src/ Sample.

poetry init는 현재 디렉터리에 pyproject.toml 파일을 생성하며, 디렉터리 생성은 수동으로 완료해야 합니다.

문서 생성, 코드 사양 확인 또는 코드 적용 범위에 중점을 두지 않습니다. 프로젝트 구성은 모두 pyproject.toml 파일에 더 중앙화되어 있습니다. toml이란 무엇입니까? Tom's Obvious, Minimal Language (https://github.com/toml-lang/toml) 구성 파일 형식입니다.

pyproject.toml은 시 추가, 시 설치 등 NodeJS의 package.json 파일과 다소 유사합니다. 명령줄

# 往 pyproject.toml 中添加对boto3 的依赖并安装(add 还能从本地或 git 来安装依赖 ),
poetry add boto3
# 将依照 pyproject.toml 文件中定义安装相应的依赖到当前的 Python 虚拟环境中
# 比如在 <test-venv>/lib/python3.9/site-packages 目录中,安装好模块后也可让测试用例使用
poetry install
로그인 후 복사

其他主要的

1.poetry build# 构建可安装的 *.whl 和 tar.gz 文件
2.poetry shell# 会根据定义在 pyproject.toml 文件中的依赖创建并使用虚拟环境
3.poetry run pytest# 运行使用 pytest 的测试用例,如 tests/test_sample.py
4.poetry run python -m unittest tests/sample_tests.py# 运行 unittest 测试用例
5.poetry export --without-hashes --output requirements.txt# 导出 requirements.txt 文件, --dev导出含 dev 的依赖,或者用 poetry export --without-hashes > requirements.txt
로그인 후 복사

poetry run 能执行任何系统命令,只是它会在它要的虚拟环境中执行。所以可以想见,poetry 的项目要生成文档或覆盖率都必须用 poetry run ... 命令来支持 sphinx, coverage 或 flake8。

在 sample 目录(与 pyproject.toml 文件平级)中创建文件 my_module.py, 内容为

def main():
 print('hello poetry')
로그인 후 복사

然后在 pyproject.toml 中写上。

[tool.poetry.scripts]
my-script="sample.my_module:main"
로그인 후 복사

再执行

$ poetry run my-script
로그인 후 복사

就会输出 "hello poetry"。

通过对以上四个工具的认识,项目结构的复杂度由 cookiecutter-pyproject -> PyScaffold -> PyBuilder -> Poetry 依次降低,使用的难度大略也是相同的顺序

위 내용은 4가지 Python 프로젝트 관리 및 구축 도구, 추천 모음!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿