Home > Blockchain >  How in tox run bash script and reuse returned value?
How in tox run bash script and reuse returned value?

Time:01-21

When I create a tox environment, some libraries are installed under different paths depending on the environment that I use to trigger tox:

# Tox triggered inside virtual env
.tox/lib/site-packages

Sometimes

# Tox triggered inside docker
.tox/lib/python3.8/site-packages

I need to reuse such path in further steps inside tox env. I decided to create a bash script to find the path for installed libraries to be able to reuse it and to run it inside tox env. I thought that I can pass found path to tox and reuse it in one of the next commands. Is it possible to do such thing?

I tried:

tox.ini

[tox]
envlist =
    docs
min_version = 4
skipsdist = True
allowlist_externals = cd
passenv =
    HOMEPATH
    PROGRAMDATA
basepython = python3.8

[testenv:docs]
changedir = docs
deps =
    -r some_path/library_name/requirements.txt
commands =
    my_variable=$(bash ../docs/source/script.sh)
    sphinx-apidoc -f -o $my_variable/source $my_variable

But apparently this doesn't work with tox:

docs: commands[0] docs> my_variable=$(bash ../docs/source/script.sh) docs: exit 2 (0.03 seconds) docs> my_variable=$(bash../docs/source/script.sh) docs: FAIL code 2 (0.20=setup[0.17] cmd[0.03] seconds) evaluation failed :( (0.50 seconds)

Bash script

script.sh

#!/bin/bash

tox_env_path="../.tox/docs/"
conf_source="source"

tox_libs=$(find . $tox_env_path -type d -name "<name of library>")

sudo mkdir -p $tox_libs/docs/source
cp $conf_source/conf.py $conf_source/index.rst $tox_libs/docs/source

echo $tox_libs

CodePudding user response:

Not a direct answer to your question, but maybe something like this can help you achieve the actual goal (XY problem):

[testenv:docs]
# ...
allowlist_externals =
    bash
commands =
    python -c 'print("The path is: {env_site_packages_dir}")'
    bash ../docs/source/script.sh
    sphinx-apidoc -f -o {env_site_packages_dir}/LibName/source {env_site_packages_dir}/LibName

Indeed, it seems to me like it is unnecessary to compute the path in the bash script and try to read this path in a variable.

1. As far as I know it is not possible to assign values to a variable like you suggest in your question, tox.ini does not allow it.

2. On the other hand, tox.ini allows subsitutions and in particular the {env_site_packages_dir} seems helpful for your use case.

  • Related