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가 설치되어 있기만 하면 동일한 셸 환경을 사용할 수 있습니다.