weixin_39918084
weixin_39918084
2020-12-25 18:07

All packages with CLI failing with '/home/runner/.local/bin' which is not on PATH

Describe the bug

Packages entrypoints/CLI are not available in PATH e.g. flake8, poetry, pytest.

When investigating Github Action logs I can see two noticeable warnings that explains the issue:

  • Defaulting to user installation because normal site-packages is not writeable
  • WARNING: The script flake8 is installed in '/home/runner/.local/bin' which is not on PATH.

As I have another repo using this same action, and it is working just fine, I wonder if something happened recently to cause this - Virtualenv manipulation, PATH manipulation, etc.

Which version of the action are you using?

Tried both - same issue

  • [x] v1
  • [x] v2
  • [ ] Some other tag (such as v2.0.1 or master)

Environment - [ ] self-hosted - [x] Linux (ubuntu latest) - [ ] Windows - [ ] Mac

If applicable, please specify if you're using a container

Python Versions Please list all of the effected versions of Python (3.8.2, etc.)

3.6, 3.7, 3.8

To Reproduce

Create a new Github action using the following steps:

yaml
    steps:
      - uses: actions/checkout
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install dependencies
        run: |
          pip install --upgrade pip poetry
          poetry install

It will fail when it attempts to run poetry command. Same happens with any other package.

Run/Repo Url If applicable, and if your repo/run is public, please include a URL so it is easier for us to investigate.

https://github.com/aws-samples/cookiecutter-aws-sam-pipeline/pull/10/checks?check_run_id=730151630

Screenshots If applicable, add screenshots to help explain your problem.

image

Additional context

PATH content - Captured via tmate session

shell
echo $PATH
/opt/hostedtoolcache/Python/3.6.10/x64/bin:/opt/hostedtoolcache/Python/3.6.10/x64:/usr/share/rust/.cargo/bin:/home/runner/.config/composer/vendor/bin:/home/runner/.dotnet/tools:/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:/home/runner/.dotnet/tools

Debug logs

python
Defaulting to user installation because normal site-packages is not writeable
Requirement already up-to-date: pip in /opt/hostedtoolcache/Python/3.6.10/x64/lib/python3.6/site-packages (20.1.1)
runner-az78:~/work/cookiecutter-aws-sam-pipeline/cookiecutter-aws-sam-pipeline$ pip install flake8
Defaulting to user installation because normal site-packages is not writeable
Collecting flake8
  Downloading flake8-3.8.2-py2.py3-none-any.whl (72 kB)
     |████████████████████████████████| 72 kB 1.7 MB/s
Collecting mccabe<0.7.0,>=0.6.0
  Downloading mccabe-0.6.1-py2.py3-none-any.whl (8.6 kB)
Requirement already satisfied: importlib-metadata; python_version < "3.8" in /home/runner/.local/lib/python3.6/site-packages (from flake8) (1.1.3)
Collecting pycodestyle<2.7.0,>=2.6.0a1
  Downloading pycodestyle-2.6.0-py2.py3-none-any.whl (41 kB)
     |████████████████████████████████| 41 kB 796 kB/s
Collecting pyflakes<2.3.0,>=2.2.0
  Downloading pyflakes-2.2.0-py2.py3-none-any.whl (66 kB)
     |████████████████████████████████| 66 kB 9.7 MB/s
Requirement already satisfied: zipp>=0.5 in /home/runner/.local/lib/python3.6/site-packages (from importlib-metadata; python_version < "3.8"->flake8) (3.1.0)
Installing collected packages: mccabe, pycodestyle, pyflakes, flake8
  WARNING: The script pycodestyle is installed in '/home/runner/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script pyflakes is installed in '/home/runner/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script flake8 is installed in '/home/runner/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

Add any other context about the problem here.

该提问来源于开源项目:actions/setup-python

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • weixin_39969143 weixin_39969143 4月前

    For what it's worth, I think I ran into a similar issue. Looks like for some reason Python 2 is being used in the container even when I specified another version. Maybe that's related? :thinking:

    点赞 评论 复制链接分享
  • weixin_39969143 weixin_39969143 4月前

    Ah. Please disregard my earlier comment. Turns out I'd made a typo in my action. I pluralized my matrix with

    yaml
    python-versions: [3.6, 3.7, 3.8, 3.9]
    

    instead of

    yaml
    python-version: [3.6, 3.7, 3.8, 3.9]
    

    I imagine that causes ${{ matrix.python-version }} to be empty then, so Python 2.7 was the default python. :man_shrugging:

    点赞 评论 复制链接分享
  • weixin_39574708 weixin_39574708 4月前

    I'm reproducing a very similar issue. I have the same Python action running in two repos, and it succeeds in one while failing in another.

    In this case I'm trying to run flake8, but get the same "command not found" issue with black and pytest:

    yaml
    name: Python tests
    on: [push, pull_request]
    jobs:
      test:
        runs-on: ubuntu-latest
        strategy:
          matrix:
            python-version: [3.6]
        steps:
        - uses: actions/checkout
        - run: |
            # Hack to get setup-python to work on act
            # https://github.com/nektos/act/issues/251#issuecomment-706412948
            if [ ! -f "/etc/lsb-release" ] ; then
              echo "DISTRIB_RELEASE=18.04" > /etc/lsb-release
            fi
        - name: Set up Python ${{ matrix.python-version }}
          uses: actions/setup-python
          with:
            python-version: ${{ matrix.python-version }}
        - name: Install dependencies
          run: |
            python -m pip install --upgrade pip
            pip install flake8
        - name: Lint with flake8
          run: |
            flake8 .
    

    In the repo where this doesn't work, it gives the warning:

    
    WARNING: The script flake8 is installed in '/opt/hostedtoolcache/Python/3.6.12/x64/lib/my_project' which is not on PATH.
    

    In the repo where it does work, there is no warning.

    Interestingly, I can reproduce this both in the github runner, and also locally using the act local Docker runner on mac. This implies that there's something about the structure of the two repos which is causing different behaviors. Will try to narrow it down to a reproducible scenario.

    点赞 评论 复制链接分享
  • weixin_39574708 weixin_39574708 4月前

    Update:

    I've narrowed down the issue to a setup.cfg file in the root directory of the affected repo. There was a config like:

    cfg
    [install]
    install-scripts=...
    

    which was affecting the location to which pip installed the commands

    looks like your repo might have a similar issue:

    https://github.com/aws-samples/cookiecutter-aws-sam-pipeline/blob/f50dfee4f1dd2e618bd3c23098ce0e8b679d5c77/setup.cfg#L1-L2

    cfg
    [install]
    prefix= 
    

    A workaround is to cd out of the repo directory before installing dependencies:

    yaml
        - name: Install dependencies
          run: |
            cd /
            python -m pip install --upgrade pip
            pip install flake8
    
    点赞 评论 复制链接分享

相关推荐