Question: Question: How should I refactor my postCreateCommand so that project dependencies are not installed as root? Problem (research and solution attempt follow below): I run pip install -r requirements.txt within the postCreateCommand in my devcontainer.json. However, pip still complains about being run as root:  "postCreateCommand": "pip3 install -r requirements.txt",  Below is the output of my postCreateCommand: Running the postCreateCommand from devcontainer.json... [7619 ms] Start: Run in container: /bin/sh -c pip3 install --user -r requirements.txt Looking in indexes: https://pypi.org/simple, https://download.pytorch.org/whl/cu113 Collecting absl-py==1.0.0 Downloading absl_py-1.0.0-py3-none-any.whl (126 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 126.7/126.7 kB 8.4 MB/s eta 0:00:00 Collecting anndata==0.8.0 Downloading anndata-0.8.0-py3-none-any.whl (96 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.1/96.1 kB 8.2 MB/s eta 0:00:00 Collecting argon2-cffi==21.3.0 Downloading argon2_cffi-21.3.0-py3-none-any.whl (14 kB) Collecting argon2-cffi-bindings==21.2.0 Downloading argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (86 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 86.2/86.2 kB 8.0 MB/s eta 0:00:00 Collecting asttokens==2.0.5 Downloading asttokens-2.0.5-py2.py3-none-any.whl (20 kB) Collecting attrs==21.4.0 Downloading attrs-21.4.0-py2.py3-none-any.whl (60 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.6/60.6 kB 4.4 MB/s eta 0:00:00 Collecting backcall==0.2.0 Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB) Collecting beautifulsoup4==4.11.1 Downloading beautifulsoup4-4.11.1-py3-none-any.whl (128 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 128.2/128.2 kB 12.3 MB/s eta 0:00:00 Collecting bleach==5.0.0 Downloading bleach-5.0.0-py3-none-any.whl (160 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 160.3/160.3 kB 15.0 MB/s eta 0:00:00 Collecting cachetools==5.2.0 Downloading cachetools-5.2.0-py3-none-any.whl (9.3 kB) Collecting certifi==2022.5.18.1 Downloading certifi-2022.5.18.1-py3-none-any.whl (155 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.2/155.2 kB 12.9 MB/s eta 0:00:00 Collecting cffi==1.15.0 Downloading cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 446.7/446.7 kB 16.9 MB/s eta 0:00:00 Collecting charset-normalizer==2.0.12 Downloading charset_normalizer-2.0.12-py3-none-any.whl (39 kB) Collecting cycler==0.11.0 Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB) Collecting debugpy==1.6.0 Downloading debugpy-1.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 34.7 MB/s eta 0:00:00 Collecting decorator==5.1.1 Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB) Collecting defusedxml==0.7.1 Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB) Collecting entrypoints==0.4 Downloading entrypoints-0.4-py3-none-any.whl (5.3 kB) Collecting executing==0.8.3 Downloading executing-0.8.3-py2.py3-none-any.whl (16 kB) Collecting fa2==0.3.5 Downloading fa2-0.3.5.tar.gz (435 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 435.4/435.4 kB 27.9 MB/s eta 0:00:00 Preparing metadata (setup.py) ... done Collecting fastjsonschema==2.15.3 Downloading fastjsonschema-2.15.3-py3-none-any.whl (22 kB) Collecting fonttools==4.33.3 Downloading fonttools-4.33.3-py3-none-any.whl (930 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 930.9/930.9 kB 43.2 MB/s eta 0:00:00 Collecting GEOparse==2.0.3 Downloading GEOparse-2.0.3.tar.gz (278 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 278.5/278.5 kB 23.1 MB/s eta 0:00:00 Preparing metadata (setup.py) ... done Collecting google-auth==2.6.6 Downloading google_auth-2.6.6-py2.py3-none-any.whl (156 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 156.7/156.7 kB 14.7 MB/s eta 0:00:00 Collecting google-auth-oauthlib==0.4.6 Downloading google_auth_oauthlib-0.4.6-py2.py3-none-any.whl (18 kB) Collecting grpcio==1.46.3 Downloading grpcio-1.46.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.4/4.4 MB 57.8 MB/s eta 0:00:00 Collecting h5py==3.7.0 Downloading h5py-3.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (4.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 58.5 MB/s eta 0:00:00 Collecting idna==3.3 Downloading idna-3.3-py3-none-any.whl (61 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.2/61.2 kB 5.8 MB/s eta 0:00:00 Collecting igraph==0.9.10 Downloading igraph-0.9.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 51.5 MB/s eta 0:00:00 Collecting importlib-metadata==4.11.4 Downloading importlib_metadata-4.11.4-py3-none-any.whl (18 kB) Collecting importlib-resources==5.7.1 Downloading importlib_resources-5.7.1-py3-none-any.whl (28 kB) Collecting ipykernel==6.13.0 Downloading ipykernel-6.13.0-py3-none-any.whl (131 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 131.8/131.8 kB 12.2 MB/s eta 0:00:00 Collecting ipython==8.4.0 Downloading ipython-8.4.0-py3-none-any.whl (750 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 750.8/750.8 kB 39.4 MB/s eta 0:00:00 Collecting ipython-genutils==0.2.0 Downloading ipython_genutils-0.2.0-py2.py3-none-any.whl (26 kB) Collecting ipywidgets==7.7.0 Downloading ipywidgets-7.7.0-py2.py3-none-any.whl (123 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.4/123.4 kB 11.2 MB/s eta 0:00:00 Collecting jedi==0.18.1 Downloading jedi-0.18.1-py2.py3-none-any.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 53.8 MB/s eta 0:00:00 Collecting Jinja2==3.1.2 Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 kB 12.9 MB/s eta 0:00:00 Collecting joblib==1.1.0 Downloading joblib-1.1.0-py2.py3-none-any.whl (306 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 307.0/307.0 kB 22.5 MB/s eta 0:00:00 Collecting jsonschema==4.5.1 Downloading jsonschema-4.5.1-py3-none-any.whl (72 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 72.9/72.9 kB 6.9 MB/s eta 0:00:00 Collecting jupyter-client==7.3.1 Downloading jupyter_client-7.3.1-py3-none-any.whl (130 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 131.0/131.0 kB 10.6 MB/s eta 0:00:00 Collecting jupyter-console==6.4.3 Downloading jupyter_console-6.4.3-py3-none-any.whl (22 kB) Collecting jupyter-core==4.10.0 Downloading jupyter_core-4.10.0-py3-none-any.whl (87 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 87.3/87.3 kB 7.9 MB/s eta 0:00:00 Collecting jupyterlab-pygments==0.2.2 Downloading jupyterlab_pygments-0.2.2-py2.py3-none-any.whl (21 kB) Collecting jupyterlab-widgets==1.1.0 Downloading jupyterlab_widgets-1.1.0-py3-none-any.whl (245 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 245.1/245.1 kB 20.5 MB/s eta 0:00:00 Collecting kiwisolver==1.4.2 Downloading kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 52.7 MB/s eta 0:00:00 Collecting leidenalg==0.8.10 Downloading leidenalg-0.8.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 54.2 MB/s eta 0:00:00 Collecting llvmlite==0.38.1 Downloading llvmlite-0.38.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 34.5/34.5 MB 43.2 MB/s eta 0:00:00 Collecting Markdown==3.3.7 Downloading Markdown-3.3.7-py3-none-any.whl (97 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.8/97.8 kB 8.9 MB/s eta 0:00:00 Collecting MarkupSafe==2.1.1 Downloading MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB) Collecting matplotlib==3.5.2 Downloading matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3/11.3 MB 62.6 MB/s eta 0:00:00 Collecting matplotlib-inline==0.1.3 Downloading matplotlib_inline-0.1.3-py3-none-any.whl (8.2 kB) Collecting mistune==0.8.4 Downloading mistune-0.8.4-py2.py3-none-any.whl (16 kB) Collecting natsort==8.1.0 Downloading natsort-8.1.0-py3-none-any.whl (37 kB) Collecting nbclient==0.6.3 Downloading nbclient-0.6.3-py3-none-any.whl (71 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.5/71.5 kB 6.8 MB/s eta 0:00:00 Collecting nbconvert==6.5.0 Downloading nbconvert-6.5.0-py3-none-any.whl (561 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 561.6/561.6 kB 33.8 MB/s eta 0:00:00 Collecting nbformat==5.4.0 Downloading nbformat-5.4.0-py3-none-any.whl (73 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.3/73.3 kB 6.9 MB/s eta 0:00:00 Collecting nest-asyncio==1.5.5 Downloading nest_asyncio-1.5.5-py3-none-any.whl (5.2 kB) Collecting networkx==2.8.2 Downloading networkx-2.8.2-py3-none-any.whl (2.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 34.1 MB/s eta 0:00:00 Collecting notebook==6.4.11 Downloading notebook-6.4.11-py3-none-any.whl (9.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.9/9.9 MB 69.6 MB/s eta 0:00:00 Collecting numba==0.55.1 Downloading numba-0.55.1-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (3.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 51.1 MB/s eta 0:00:00 Collecting numpy==1.21.6 Downloading numpy-1.21.6-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.7/15.7 MB 60.2 MB/s eta 0:00:00 Collecting oauthlib==3.2.0 Downloading oauthlib-3.2.0-py3-none-any.whl (151 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 151.5/151.5 kB 13.7 MB/s eta 0:00:00 Collecting packaging==21.3 Downloading packaging-21.3-py3-none-any.whl (40 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 kB 3.5 MB/s eta 0:00:00 Collecting pandas==1.4.2 Downloading pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.7/11.7 MB 66.7 MB/s eta 0:00:00 Collecting pandocfilters==1.5.0 Downloading pandocfilters-1.5.0-py2.py3-none-any.whl (8.7 kB) Collecting parso==0.8.3 Downloading parso-0.8.3-py2.py3-none-any.whl (100 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.8/100.8 kB 8.1 MB/s eta 0:00:00 Collecting patsy==0.5.2 Downloading patsy-0.5.2-py2.py3-none-any.whl (233 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 233.7/233.7 kB 19.1 MB/s eta 0:00:00 Collecting pexpect==4.8.0 Downloading pexpect-4.8.0-py2.py3-none-any.whl (59 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.0/59.0 kB 5.6 MB/s eta 0:00:00 Collecting pickleshare==0.7.5 Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB) Collecting Pillow==9.1.1 Downloading Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 62.2 MB/s eta 0:00:00 Collecting prometheus-client==0.14.1 Downloading prometheus_client-0.14.1-py3-none-any.whl (59 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.5/59.5 kB 5.6 MB/s eta 0:00:00 Collecting prompt-toolkit==3.0.29 Downloading prompt_toolkit-3.0.29-py3-none-any.whl (381 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 381.5/381.5 kB 24.8 MB/s eta 0:00:00 Collecting protobuf==3.20.1 Downloading protobuf-3.20.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 32.9 MB/s eta 0:00:00 Collecting psutil==5.9.1 Downloading psutil-5.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (284 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 284.7/284.7 kB 21.5 MB/s eta 0:00:00 Collecting ptyprocess==0.7.0 Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB) Collecting pure-eval==0.2.2 Downloading pure_eval-0.2.2-py3-none-any.whl (11 kB) Collecting pyasn1==0.4.8 Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.1/77.1 kB 7.5 MB/s eta 0:00:00 Collecting pyasn1-modules==0.2.8 Downloading pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.3/155.3 kB 13.1 MB/s eta 0:00:00 Collecting pycparser==2.21 Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 118.7/118.7 kB 11.3 MB/s eta 0:00:00 Collecting Pygments==2.12.0 Downloading Pygments-2.12.0-py3-none-any.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 47.6 MB/s eta 0:00:00 Collecting pynndescent==0.5.7 Downloading pynndescent-0.5.7.tar.gz (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 54.2 MB/s eta 0:00:00 Preparing metadata (setup.py) ... done Collecting pyparsing==3.0.9 Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.3/98.3 kB 9.7 MB/s eta 0:00:00 Collecting pyrsistent==0.18.1 Downloading pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (119 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 119.8/119.8 kB 10.9 MB/s eta 0:00:00 Collecting python-dateutil==2.8.2 Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 22.2 MB/s eta 0:00:00 Collecting pytz==2022.1 Downloading pytz-2022.1-py2.py3-none-any.whl (503 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 503.5/503.5 kB 32.0 MB/s eta 0:00:00 Collecting pyzmq==23.0.0 Downloading pyzmq-23.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 48.0 MB/s eta 0:00:00 Collecting requests==2.27.1 Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 63.1/63.1 kB 5.9 MB/s eta 0:00:00 Collecting requests-oauthlib==1.3.1 Downloading requests_oauthlib-1.3.1-py2.py3-none-any.whl (23 kB) Collecting rsa==4.8 Downloading rsa-4.8-py3-none-any.whl (39 kB) Collecting scanpy==1.9.1 Downloading scanpy-1.9.1-py3-none-any.whl (2.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 65.1 MB/s eta 0:00:00 Collecting scikit-learn==1.1.1 Downloading scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 31.2/31.2 MB 44.7 MB/s eta 0:00:00 Collecting scikit-misc==0.1.4 Downloading scikit_misc-0.1.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (8.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.8/8.8 MB 67.5 MB/s eta 0:00:00 Collecting scipy==1.8.1 Downloading scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.6/41.6 MB 39.3 MB/s eta 0:00:00 Collecting seaborn==0.11.2 Downloading seaborn-0.11.2-py3-none-any.whl (292 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 292.8/292.8 kB 23.5 MB/s eta 0:00:00 Collecting Send2Trash==1.8.0 Downloading Send2Trash-1.8.0-py3-none-any.whl (18 kB) Collecting session-info==1.0.0 Downloading session_info-1.0.0.tar.gz (24 kB) Preparing metadata (setup.py) ... done Collecting six==1.16.0 Downloading six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting soupsieve==2.3.2.post1 Downloading soupsieve-2.3.2.post1-py3-none-any.whl (37 kB) Collecting stack-data==0.2.0 Downloading stack_data-0.2.0-py3-none-any.whl (21 kB) Collecting statannotations==0.4.4 Downloading statannotations-0.4.4-py3-none-any.whl (31 kB) Collecting statsmodels==0.13.2 Downloading statsmodels-0.13.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.9/9.9 MB 62.4 MB/s eta 0:00:00 Collecting stdlib-list==0.8.0 Downloading stdlib_list-0.8.0-py3-none-any.whl (63 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 63.5/63.5 kB 5.8 MB/s eta 0:00:00 Collecting tensorboard==2.9.0 Downloading tensorboard-2.9.0-py3-none-any.whl (5.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.8/5.8 MB 66.0 MB/s eta 0:00:00 Collecting tensorboard-data-server==0.6.1 Downloading tensorboard_data_server-0.6.1-py3-none-manylinux2010_x86_64.whl (4.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.9/4.9 MB 61.9 MB/s eta 0:00:00 Collecting tensorboard-plugin-wit==1.8.1 Downloading tensorboard_plugin_wit-1.8.1-py3-none-any.whl (781 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 781.3/781.3 kB 40.5 MB/s eta 0:00:00 Collecting terminado==0.15.0 Downloading terminado-0.15.0-py3-none-any.whl (16 kB) Collecting texttable==1.6.4 Downloading texttable-1.6.4-py2.py3-none-any.whl (10 kB) Collecting threadpoolctl==3.1.0 Downloading threadpoolctl-3.1.0-py3-none-any.whl (14 kB) Collecting tinycss2==1.1.1 Downloading tinycss2-1.1.1-py3-none-any.whl (21 kB) Collecting torch-tb-profiler==0.4.0 Downloading torch_tb_profiler-0.4.0-py3-none-any.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 46.9 MB/s eta 0:00:00 Collecting tornado==6.1 Downloading tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl (427 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 427.5/427.5 kB 29.1 MB/s eta 0:00:00 Collecting tqdm==4.64.0 Downloading tqdm-4.64.0-py2.py3-none-any.whl (78 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.4/78.4 kB 7.5 MB/s eta 0:00:00 Collecting traitlets==5.2.1.post0 Downloading traitlets-5.2.1.post0-py3-none-any.whl (106 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 106.6/106.6 kB 9.8 MB/s eta 0:00:00 Collecting typing_extensions==4.2.0 Downloading typing_extensions-4.2.0-py3-none-any.whl (24 kB) Collecting umap-learn==0.5.3 Downloading umap-learn-0.5.3.tar.gz (88 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 88.2/88.2 kB 8.4 MB/s eta 0:00:00 Preparing metadata (setup.py) ... done Collecting urllib3==1.26.9 Downloading urllib3-1.26.9-py2.py3-none-any.whl (138 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 139.0/139.0 kB 10.9 MB/s eta 0:00:00 Collecting wcwidth==0.2.5 Downloading wcwidth-0.2.5-py2.py3-none-any.whl (30 kB) Collecting webencodings==0.5.1 Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB) Collecting Werkzeug==2.1.2 Downloading Werkzeug-2.1.2-py3-none-any.whl (224 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 224.9/224.9 kB 17.8 MB/s eta 0:00:00 Collecting widgetsnbextension==3.6.0 Downloading widgetsnbextension-3.6.0-py2.py3-none-any.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 53.5 MB/s eta 0:00:00 Collecting zipp==3.8.0 Downloading zipp-3.8.0-py3-none-any.whl (5.4 kB) Collecting torch==1.11.0+cu113 Downloading https://download.pytorch.org/whl/cu113/torch-1.11.0%2Bcu113-cp38-cp38-linux_x86_64.whl (1637.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 GB 2.4 MB/s eta 0:00:00 Collecting torchvision==0.12.0+cu113 Downloading https://download.pytorch.org/whl/cu113/torchvision-0.12.0%2Bcu113-cp38-cp38-linux_x86_64.whl (22.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 22.3/22.3 MB 56.9 MB/s eta 0:00:00 Collecting torchaudio==0.11.0+cu113 Downloading https://download.pytorch.org/whl/cu113/torchaudio-0.11.0%2Bcu113-cp38-cp38-linux_x86_64.whl (2.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.9/2.9 MB 25.2 MB/s eta 0:00:00 Requirement already satisfied: setuptools>=18.5 in /usr/local/python/lib/python3.8/site-packages (from ipython==8.4.0->-r requirements.txt (line 33)) (56.0.0) Collecting wheel>=0.26 Downloading wheel-0.37.1-py2.py3-none-any.whl (35 kB) Using legacy 'setup.py install' for fa2, since package 'wheel' is not installed. Using legacy 'setup.py install' for GEOparse, since package 'wheel' is not installed. Using legacy 'setup.py install' for pynndescent, since package 'wheel' is not installed. Using legacy 'setup.py install' for session-info, since package 'wheel' is not installed. Using legacy 'setup.py install' for umap-learn, since package 'wheel' is not installed. Installing collected packages: webencodings, wcwidth, texttable, tensorboard-plugin-wit, stdlib-list, Send2Trash, pytz, pyasn1, pure-eval, ptyprocess, pickleshare, mistune, ipython-genutils, fastjsonschema, executing, backcall, zipp, wheel, Werkzeug, urllib3, typing_extensions, traitlets, tqdm, tornado, tinycss2, threadpoolctl, tensorboard-data-server, soupsieve, six, session-info, rsa, pyzmq, pyrsistent, pyparsing, Pygments, pycparser, pyasn1-modules, psutil, protobuf, prompt-toolkit, prometheus-client, Pillow, pexpect, parso, pandocfilters, oauthlib, numpy, networkx, nest-asyncio, natsort, MarkupSafe, llvmlite, kiwisolver, jupyterlab-widgets, jupyterlab-pygments, joblib, igraph, idna, fonttools, entrypoints, defusedxml, decorator, debugpy, cycler, charset-normalizer, certifi, cachetools, attrs, torch, terminado, scipy, scikit-misc, requests, python-dateutil, patsy, packaging, numba, matplotlib-inline, leidenalg, jupyter-core, Jinja2, jedi, importlib-resources, importlib-metadata, h5py, grpcio, google-auth, cffi, bleach, beautifulsoup4, asttokens, absl-py, torchvision, torchaudio, stack-data, scikit-learn, requests-oauthlib, pandas, matplotlib, Markdown, jupyter-client, jsonschema, fa2, argon2-cffi-bindings, statsmodels, seaborn, pynndescent, nbformat, ipython, google-auth-oauthlib, GEOparse, argon2-cffi, anndata, umap-learn, tensorboard, statannotations, nbclient, ipykernel, torch-tb-profiler, scanpy, nbconvert, jupyter-console, notebook, widgetsnbextension, ipywidgets Running setup.py install for session-info ... done Running setup.py install for fa2 ... done Running setup.py install for pynndescent ... done Running setup.py install for GEOparse ... done Running setup.py install for umap-learn ... done Successfully installed GEOparse-2.0.3 Jinja2-3.1.2 Markdown-3.3.7 MarkupSafe-2.1.1 Pillow-9.1.1 Pygments-2.12.0 Send2Trash-1.8.0 Werkzeug-2.1.2 absl-py-1.0.0 anndata-0.8.0 argon2-cffi-21.3.0 argon2-cffi-bindings-21.2.0 asttokens-2.0.5 attrs-21.4.0 backcall-0.2.0 beautifulsoup4-4.11.1 bleach-5.0.0 cachetools-5.2.0 certifi-2022.5.18.1 cffi-1.15.0 charset-normalizer-2.0.12 cycler-0.11.0 debugpy-1.6.0 decorator-5.1.1 defusedxml-0.7.1 entrypoints-0.4 executing-0.8.3 fa2-0.3.5 fastjsonschema-2.15.3 fonttools-4.33.3 google-auth-2.6.6 google-auth-oauthlib-0.4.6 grpcio-1.46.3 h5py-3.7.0 idna-3.3 igraph-0.9.10 importlib-metadata-4.11.4 importlib-resources-5.7.1 ipykernel-6.13.0 ipython-8.4.0 ipython-genutils-0.2.0 ipywidgets-7.7.0 jedi-0.18.1 joblib-1.1.0 jsonschema-4.5.1 jupyter-client-7.3.1 jupyter-console-6.4.3 jupyter-core-4.10.0 jupyterlab-pygments-0.2.2 jupyterlab-widgets-1.1.0 kiwisolver-1.4.2 leidenalg-0.8.10 llvmlite-0.38.1 matplotlib-3.5.2 matplotlib-inline-0.1.3 mistune-0.8.4 natsort-8.1.0 nbclient-0.6.3 nbconvert-6.5.0 nbformat-5.4.0 nest-asyncio-1.5.5 networkx-2.8.2 notebook-6.4.11 numba-0.55.1 numpy-1.21.6 oauthlib-3.2.0 packaging-21.3 pandas-1.4.2 pandocfilters-1.5.0 parso-0.8.3 patsy-0.5.2 pexpect-4.8.0 pickleshare-0.7.5 prometheus-client-0.14.1 prompt-toolkit-3.0.29 protobuf-3.20.1 psutil-5.9.1 ptyprocess-0.7.0 pure-eval-0.2.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pycparser-2.21 pynndescent-0.5.7 pyparsing-3.0.9 pyrsistent-0.18.1 python-dateutil-2.8.2 pytz-2022.1 pyzmq-23.0.0 requests-2.27.1 requests-oauthlib-1.3.1 rsa-4.8 scanpy-1.9.1 scikit-learn-1.1.1 scikit-misc-0.1.4 scipy-1.8.1 seaborn-0.11.2 session-info-1.0.0 six-1.16.0 soupsieve-2.3.2.post1 stack-data-0.2.0 statannotations-0.4.4 statsmodels-0.13.2 stdlib-list-0.8.0 tensorboard-2.9.0 tensorboard-data-server-0.6.1 tensorboard-plugin-wit-1.8.1 terminado-0.15.0 texttable-1.6.4 threadpoolctl-3.1.0 tinycss2-1.1.1 torch-1.11.0+cu113 torch-tb-profiler-0.4.0 torchaudio-0.11.0+cu113 torchvision-0.12.0+cu113 tornado-6.1 tqdm-4.64.0 traitlets-5.2.1.post0 typing_extensions-4.2.0 umap-learn-0.5.3 urllib3-1.26.9 wcwidth-0.2.5 webencodings-0.5.1 wheel-0.37.1 widgetsnbextension-3.6.0 zipp-3.8.0 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv [notice] A new release of pip available: 22.2.1 -> 22.2.2 [notice] To update, run: pip install --upgrade pip Done. Press any key to close the terminal  Research on problem and attempt to correct:  Consult the devcontainer.json docs  postCreateCommand only runs after "the dev container has been assigned to a user for the first time" invocation of containerUser switches to root by default (1.1-2) imply that postCreateCommand just runs under the non-root user of my container   I add the --user option to my pip call  The full command is now "postCreateCommand": "pip3 install --user -r requirements.txt", (2.1) produces the same warning as the original call, indicating that postCreateCommand is still running as root   

Answer: Turns out that my dockerfile, in order to provide the correct environment for setup scripts, sets the user via ARG calls instead of the USER instruction. Therefore containerUser is implicitly set as root at the time that postCreateCommand is invoked. It was sufficient to explicitly set containerUser to the user created in my dockerfile, before postCreateCommand:  "remoteUser": "vscode", "postCreateCommand": "pip3 install --user -r requirements.txt",