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를 추가하여 프로그램 코드를 사용하여 설치하고 빌드합니다. 프로젝트 디렉토리 레이아웃과 관련하여 일부는 프로젝트 템플릿을 만든 다음 프로젝트 템플릿을 적용하는 도구를 만듭니다.
다음은 네 가지 도구의 사용에 대한 간략한 개요입니다.
$ 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 이름에서 알 수 있듯이 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가 생성하는 디렉터리 구조는 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는 더 높은 프로젝트 활동을 갖춘 더 성숙한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!