راهاندازی محیط توسعه پایتون
در این مثال، شما به عنوان یک تمرین، یک برنامه وب پایتون با استفاده از چارچوب وب Flask خواهید ساخت. برای استفادهی بهینه از این بخش، باید با محیطهای اعلامی و قابل بازتولید آشنا باشید.
یک فایل جدید به نام 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() این یک برنامه ساده Flask است که یک سند JSON با پیام "Hello, Nix!" را ارائه میدهد.
یک فایل جدید 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 توصیف میکند که شامل بسته flask با استفاده از python3.withPackages است.
همچنین شامل curl (ابزاری برای انجام درخواستهای وب) و jq (ابزاری برای تجزیه و قالببندی اسناد JSON) میشود.
هیچکدام از این دو مورد، بسته پایتون نیستند. اگر از 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 اکنون یک وباپلیکیشن پایتون در حال اجرا دارید. آن را امتحان کنید.
یک ترمینال جدید باز کنید تا جلسه دیگری از محیط شل را شروع کرده و دستورات زیر را دنبال کنید:
$ 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 را نصب کرده باشند، از همان محیط شل استفاده کنند.