콘텐츠로 이동

파이썬 프로젝트

Python 프로젝트 생성기는 최신 Python 라이브러리나 애플리케이션을 생성하는 데 사용할 수 있으며, UV로 관리되는 단일 잠금 파일 및 가상 환경을 UV 작업 공간에 구성하고, 테스트 실행을 위한 pytest, 정적 분석을 위한 Ruff 등 모범 사례가 적용되어 있습니다.

새로운 Python 프로젝트를 두 가지 방법으로 생성할 수 있습니다:

  1. 설치 Nx Console VSCode Plugin 아직 설치하지 않았다면
  2. VSCode에서 Nx 콘솔 열기
  3. 클릭 Generate (UI) "Common Nx Commands" 섹션에서
  4. 검색 @aws/nx-plugin - py#project
  5. 필수 매개변수 입력
    • 클릭 Generate
    매개변수 타입 기본값 설명
    name 필수 string - The name of the Python project
    directory string packages Parent directory where the project is placed.
    projectType 필수 string application Project type
    moduleName string - Python module name

    생성기는 <directory>/<name> 디렉토리에 다음 프로젝트 구조를 생성합니다:

    • 디렉터리<module-name>
      • __init__.py 모듈 초기화
      • hello.py 예제 Python 소스 파일
    • 디렉터리tests
      • __init__.py 모듈 초기화
      • conftest.py 테스트 구성
      • test_hello.py 예제 테스트
    • project.json 프로젝트 구성 및 빌드 대상
    • pyproject.toml UV용 패키징 구성 파일
    • .python-version 프로젝트의 Python 버전 포함

    작업 공간 루트에 다음 파일이 생성/업데이트된 것을 확인할 수도 있습니다:

    • pyproject.toml UV용 작업 공간 수준 패키징 구성
    • .python-version 작업 공간 Python 버전 포함
    • uv.lock Python 종속성 잠금 파일

    Python 소스 코드는 <module-name> 디렉토리에 추가하세요.

    다른 프로젝트에서 라이브러리 코드 임포트

    섹션 제목: “다른 프로젝트에서 라이브러리 코드 임포트”

    add 대상을 사용하여 Python 프로젝트에 종속성을 추가할 수 있습니다.

    my_appmy_lib 두 개의 Python 프로젝트를 생성했다고 가정합니다. 이 프로젝트의 정규화된 이름은 my_scope.my_appmy_scope.my_lib이 되며, 기본 모듈 이름은 각각 my_scope_my_appmy_scope_my_lib이 됩니다.

    my_appmy_lib에 종속되도록 하려면 다음 명령을 실행합니다:

    Terminal window
    pnpm nx run my_scope.my_app:add my_scope.my_lib

    이제 라이브러리 코드를 임포트할 수 있습니다:

    packages/my_app/my_scope_my_app/main.py
    from my_scope_my_lib.hello import say_hello

    위 예시에서 my_scope_my_lib은 라이브러리의 모듈 이름이며, hello는 Python 소스 파일 hello.py에 해당하고, say_hellohello.py에 정의된 메서드입니다.

    프로젝트에 종속성을 추가하려면 Python 프로젝트에서 add 대상을 실행하세요. 예시:

    Terminal window
    pnpm nx run my_scope.my_library:add some-pip-package

    이 명령은 프로젝트의 pyproject.toml 파일에 종속성을 추가하고 루트 uv.lock을 업데이트합니다.

    Python 프로젝트를 런타임 코드(예: AWS 람다 함수 핸들러)로 사용할 경우, 소스 코드와 모든 종속성을 번들로 만들어야 합니다. project.json 파일에 다음 예시와 같은 대상을 추가하여 이를 구현할 수 있습니다:

    project.json
    {
    ...
    "targets": {
    ...
    "bundle": {
    "cache": true,
    "executor": "nx:run-commands",
    "outputs": ["{workspaceRoot}/dist/packages/my_library/bundle"],
    "options": {
    "commands": [
    "uv export --frozen --no-dev --no-editable --project packages/my_library --package my_scope.my_library -o dist/packages/my_library/bundle/requirements.txt",
    "uv pip install -n --no-installer-metadata --no-compile-bytecode --python-platform x86_64-manylinux2014 --python `uv python pin` --target dist/packages/my_library/bundle -r dist/packages/my_library/bundle/requirements.txt"
    ],
    "parallel": false
    },
    "dependsOn": ["compile"]
    },
    },
    }

    Python 프로젝트는 build 대상으로 구성되어 있으며(project.json에 정의됨), 다음 명령으로 실행할 수 있습니다:

    Terminal window
    pnpm nx run <project-name>:build

    여기서 <project-name>은 프로젝트의 정규화된 이름입니다.

    build 대상은 프로젝트를 컴파일, 린트, 테스트합니다.

    빌드 출력은 작업 공간 루트의 dist 폴더 내 프로젝트별 디렉토리(예: dist/packages/<my-library>/build)에서 확인할 수 있습니다.

    pytest가 프로젝트 테스트를 위해 구성되어 있습니다.

    테스트는 프로젝트 내 test 디렉토리에 test_ 접두사가 붙은 Python 파일로 작성해야 합니다. 예시:

    • 디렉터리my_library
      • hello.py
    • 디렉터리test
      • test_hello.py hello.py 테스트

    테스트 메서드는 test_로 시작하며 어설션을 사용하여 기대값을 검증합니다. 예시:

    test/test_hello.py
    from my_library.hello import say_hello
    def test_say_hello():
    assert say_hello("Darth Vader") == "Hello, Darth Vader!"

    테스트 작성 방법에 대한 자세한 내용은 pytest 문서를 참조하세요.

    테스트는 프로젝트의 build 대상 실행 시 자동으로 실행되지만, test 대상으로 개별 실행도 가능합니다:

    Terminal window
    pnpm nx run <project-name>:test

    -k 플래그를 사용하여 특정 테스트 파일이나 메서드를 지정해 실행할 수 있습니다:

    Terminal window
    pnpm nx run <project-name>:test -k 'test_say_hello'

    Python 프로젝트는 Ruff를 사용해 린팅을 수행합니다.

    프로젝트 린트 검사를 위해 lint 대상을 실행하세요:

    Terminal window
    pnpm nx run <project-name>:lint

    대부분의 린트 또는 포맷팅 문제는 자동으로 수정할 수 있습니다. --configuration=fix 인자를 사용하여 Ruff가 문제를 수정하도록 할 수 있습니다:

    Terminal window
    pnpm nx run <project-name>:lint --configuration=fix

    모든 패키지의 린트 문제를 일괄 수정하려면 다음 명령을 실행하세요:

    Terminal window
    pnpm nx run-many --target lint --all --configuration=fix