Python 개발 환경 설정하기

내용

Python 개발 환경 설정하기#

이 예제에서는 연습 삼아 Flask 웹 프레임워크를 사용하여 Python 웹 애플리케이션을 만듭니다. 이 예제를 최대한 활용하려면 선언적 셸 환경 정의하기에 익숙해야 합니다.

myapp.py라는 새 파일을 만들고 다음 코드를 추가하십시오:

#!/usr/bin/env python

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return {
        "message": "Hello, Nix!"
    }

def run():
    app.run(host="0.0.0.0", port=5000)

if __name__ == "__main__":
    run()

이것은 "Hello, Nix!"라는 메시지가 담긴 JSON 문서를 제공하는 간단한 Flask 애플리케이션입니다.

개발 환경을 선언하기 위해 새 파일 shell.nix를 만드십시오:

{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-23.11") {} }:

pkgs.mkShellNoCC {
  packages = with pkgs; [
    (python3.withPackages (ps: [ ps.flask ]))
    curl
    jq
  ];
}

이것은 python3.withPackages를 사용하여 flask 패키지를 포함한 python3 인스턴스가 있는 셸 환경을 기술합니다. 또한 웹 요청을 수행하는 유틸리티인 curl과 JSON 문서를 파싱하고 포맷하는 도구인 jq도 포함합니다.

둘 다 Python 패키지가 아닙니다. Python의 virtualenv를 사용했다면 추가적인 수동 작업 없이는 이러한 유틸리티를 개발 환경에 추가할 수 없었을 것입니다.

nix-shell을 실행하여 방금 선언한 환경에 진입하십시오:

$ nix-shell
these 2 derivations will be built:
  /nix/store/5yvz7zf8yzck6r9z4f1br9sh71vqkimk-builder.pl.drv
  /nix/store/aihgjkf856dbpjjqalgrdmxyyd8a5j2m-python3-3.9.13-env.drv
these 93 paths will be fetched (109.50 MiB download, 468.52 MiB unpacked):
  /nix/store/0xxjx37fcy2nl3yz6igmv4mag2a7giq6-glibc-2.33-123
  /nix/store/138azk9hs5a2yp3zzx6iy1vdwi9q26wv-hook
...

[nix-shell:~]$

이 셸 환경 안에서 웹 애플리케이션을 시작하십시오:

[nix-shell:~]$ python ./myapp.py
 * Serving Flask app 'myapp'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://192.168.1.100:5000
Press CTRL+C to quit

이제 Python 웹 애플리케이션이 실행되고 있습니다. 직접 해 보십시오.

새 터미널을 열어 셸 환경의 다른 세션을 시작하고 아래 명령을 따라 하십시오:

$ nix-shell

[nix-shell:~]$ curl 127.0.0.1:5000
{"message":"Hello, Nix!"}

[nix-shell:~]$ curl 127.0.0.1:5000 | jq '.message'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    26  100    26    0     0  13785      0 --:--:-- --:--:-- --:--:-- 26000
"Hello, Nix!"

보시다시피 별도의 수동 설치 없이 curl과 jq를 모두 사용하여 실행 중인 웹 애플리케이션을 테스트할 수 있습니다.

우리가 만든 파일을 버전 관리 시스템에 커밋하여 다른 사람과 공유할 수 있습니다. 이제 다른 사람도 Nix가 설치되어 있기만 하면 동일한 셸 환경을 사용할 수 있습니다.

다음 단계#