as of now, swh-environment within nix:
```
$ nix-shell swh.nix
```
withThe first time, nix will install all the necessary runtime tools.
Then create a new virtualenv "swh".
Then install the necessary swh tools.
Next time, it will connect to the virtualenv.
with $SWH_ENVIRONMENT_HOME/swh.nix as:
```
$ cat swh.nix
with import <nixpkgs> {};
with pkgs.python3Packages;
let ppackages = pkgs.python3Packages;
in stdenv.mkDerivation {
name = "swhEnv";
buildInputs = [
# required packages for virtualenvwrapper and pip to work
# python3Full
# ppackages.virtualenv
ppackages.virtualenvwrapper
ppackages.pipipython
# runtime dependencies needed for the python modules pip will try
# to install. In this particular environment the python modules
# listed in the accumulated requirements.txt require the following
# packages to be installed locally in order to compile any binary
# extensions they may require.
openssl
libffi
libzip
stdenv
zlib
pkgs.docker
pkgs.systemd.lib systemd
# subvertpy needs this
apr aprutil pkgs.subversion.dev
# web (not enough)
pkgs.libxml2 python3Packages.lxml
postgresql_11
];
src = null;
shellHook =''
# set SOURCE_DATE_EPOCH so that we can use python wheels
SOURCE_DATE_EPOCH=$(date +%s)
source ${ppackages.virtualenvwrapper}/bin/virtualenvwrapper_lazy.sh
export ENV_NAME=swh2
export ENV_FOLDER=$HOME/.virtualenvs/$ENV_NAME/
install_or_-or-update_-env() {
pip install $( ./bin/pip-swh-packages --with-testing ) \echo "($ENV_NAME) $ENV_FOLDER: Install tools..."
pip install pytest tox pifpaf flake8 codespell pre-commit pdbpp
# no need if we are using mainly tox
tox pifpaf flake8 codespell || echo "I# echo "($ENV_NAME) $ENV_FOLDER: Install pip swh packages..."
# pip install with error, skipping"$( ./bin/pip-swh-packages --with-testing )
}
if [ ! -d $ENV_FOLDER ]; then
echo "Creating virtualenv $ENV_NAME at $ENV_FOLDER"
# export LC_ALL=C.UTF-8
# export LC_CTYPE=C.UTF-8
# export LANG=C.UTF-8
# subvertpy needs this for compilation
export SVN_PREFIX=${pkgs.subversion.dev}
# libsystemd need this
export PKG_CONFIG_PATH=${pkgs.systemd.lib}/lib
mkvirtualenv -p ${python3}/bin/python3 -a $SWH_ENVIRONMENT_HOMEecho "Creating virtualenv $ENV_NAME
cp postactivate $SWH_ENV/bin/postactivate at $ENV_FOLDER"
mkvirtualenv -p ${python3}/bin/python -a $SWH_ENVIRONMENT_HOME $ENV_NAME
install_or_update_env
echo "Creating virtualenv $ENV_NAME at $ENV_FOLDER. Done."
else
echo "Connecting to virtualenv $ENV_NAME at $ENV_FOLDER"
workon $ENV_NAME
fi
'';
}
```
$SWH_ENVIRONMENT_HOME/postactivate:
```
shell=$(basename $SHELL)
case "$shell" in
"zsh")
autocomplete_cmd=source_zsh
;;
*)
autocomplete_cmd=source
;;
esac
eval "$(_SWH_SCHEDULER_COMPLETE=$autocomplete_cmd swh-scheduler)"
export SWH_SCHEDULER_URL=http://127.0.0.1:5008/
export CELERY_BROKER_URL=amqp://127.0.0.1:5072/
export COMPOSE_FILE=$SWH_ENVIRONMENT_HOME/swh-docker-dev/docker-compose.yml:$SWH_ENVIRONMENT_HOME/swh-docker-dev/docker-compose.override.yml
alias doco=docker-compose
eval "$(_SWH_DEPOSIT_COMPLETE=$autocomplete_cmd swh-deposit)"
eval "$(_SWH_JOURNAL_COMPLETE=$autocomplete_cmd swh-journal)"
eval "$(_SWH_LISTER_COMPLETE=$autocomplete_cmd swh-lister)"
function swhclean {
find $SWH_ENVIRONMENT_HOME -type d -name __pycache__ -exec rm -rf {} \;
find $SWH_ENVIRONMENT_HOME -type d -name .tox -exec rm -rf {} \;
find $SWH_ENVIRONMENT_HOME -type d -name .hypothesis -exec rm -rf {} \;
find $SWH_ENVIRONMENT_HOME -type d -name .pytest_cache -exec rm -rf {} \;
}
```
Then to update the environment from within
```
(swh2swh) $ install_or_-or-update_env-env
```