I’m trying to set up a nix-shell to develop a Flask application, and I set up a minimal example that depends on flask and flask-restful. The relevant import
statements are:
# nix_flask/app.py
from flask import Flask
from flask_restful import Resource, Api
My shell.nix
is:
with (import (builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/8746c77a383f5c76153c7a181f3616d273acfa2a.tar.gz";
}) { });
( python37.withPackages (ps: with ps; [ flask flask-restful ]) ).env
If I start the app with python
directly, it works:
# server
FLASK_APP=nix_flask/app.py FLASK_ENV=development \
python nix_flask/app.py
# client
$ curl localhost:5000
{"hello": "world"}
But if I start it with flask run
, it’s unable to find flask-restful:
# server
FLASK_APP=nix_flask/app.py FLASK_ENV=development \
flask run
# client
$ curl localhost:5000
...
Traceback (most recent call last):
File "/nix/store/...-python3.7-Flask-1.0.3/lib/python3.7/site-packages/flask/cli.py", line 236, in locate_app
__import__(module_name)
File "/path/to/nix-flask/nix_flask/app.py", line 2, in <module>
from flask_restful import Resource, Api
ModuleNotFoundError: No module named 'flask_restful'
My Nix knowledge outweighs my Python knowledge, and I’m not sure what I need to change to fix this (PYTHONPATH
?). Does anyone know what I’m doing wrong?