Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can Not Use Shell Builtin as First Command in pipenv run #6186

Open
ds-mitchell-johnstone opened this issue Jul 2, 2024 · 1 comment
Open
Labels
Contributor Candidate The issue has been identified/triaged and contributions are welcomed/encouraged. triage

Comments

@ds-mitchell-johnstone
Copy link

Issue description

When running pipenv in Ubuntu 22.04.4 LTS on Windows 10 x86_64 using WSL2, pipenv run fails to execute built-in commands that don't provide a path from which <command>.

A simple example of this bug would be:

  • pipenv run cd

which will fail with

Error: the command cd could not be found within PATH or Pipfile's [scripts].

The issue appears to be that in do_run_posix in pipenv/pipenv/routines/shell.py the first thing we try to do is to get a command path by expanding the first command with which. For shell builtins such as cd, there is no expansion that can be found with which, leading to the error logged above.

Since pipenv uses the host shell I don't think there is a reason we shouldn't accept leading builtin commands.

Expected result

If running a Ubuntu shell, I'd expect pipenv run cd to start a new shell with the virtual environment, run the cd command, and exit without output.

Actual result

$ cd
Error: the command cd could not be found within PATH or Pipfile's [scripts].

Steps to replicate

  • fresh install of ubuntu.
  • pipenv --python 3.11
  • run pipenv run cd

$ pipenv --support

Pipenv version: '2024.0.1'

Pipenv location: '/home/johnstonem/.local/lib/python3.11/site-packages/pipenv'

Python location: '/home/johnstonem/.pyenv/versions/3.11.9/bin/python3.11'

OS Name: 'posix'

User pip version: '24.0'

user Python installations found:

PEP 508 Information:

{'implementation_name': 'cpython',
 'implementation_version': '3.11.9',
 'os_name': 'posix',
 'platform_machine': 'x86_64',
 'platform_python_implementation': 'CPython',
 'platform_release': '5.15.153.1-microsoft-standard-WSL2',
 'platform_system': 'Linux',
 'platform_version': '#1 SMP Fri Mar 29 23:14:13 UTC 2024',
 'python_full_version': '3.11.9',
 'python_version': '3.11',
 'sys_platform': 'linux'}

System environment variables:

  • SHELL
  • WSL2_GUI_APPS_ENABLED
  • TERM_PROGRAM_VERSION
  • WSL_DISTRO_NAME
  • TMUX
  • WT_SESSION
  • TMUX_PLUGIN_MANAGER_PATH
  • NAME
  • PWD
  • LOGNAME
  • HOME
  • LANG
  • WSL_INTEROP
  • LS_COLORS
  • WAYLAND_DISPLAY
  • LESSCLOSE
  • TERM
  • LESSOPEN
  • USER
  • TMUX_PANE
  • DISPLAY
  • SHLVL
  • XDG_RUNTIME_DIR
  • PYENV_ROOT
  • WSLENV
  • XDG_DATA_DIRS
  • BROWSER
  • PATH
  • DBUS_SESSION_BUS_ADDRESS
  • HOSTTYPE
  • PULSE_SERVER
  • WT_PROFILE_ID
  • OLDPWD
  • TERM_PROGRAM
  • _
  • PIP_DISABLE_PIP_VERSION_CHECK
  • PYTHONDONTWRITEBYTECODE
  • PYTHONFINDER_IGNORE_UNSUPPORTED

PipenvΓÇôspecific environment variables:

DebugΓÇôspecific environment variables:

  • PATH: /home/johnstonem/.pyenv/versions/3.11.9/bin:/usr/bin:/home/johnstonem/.pyenv/versions/3.11.9/bin:/home/johnstonem/.pyenv/bin:/home/johnstonem/.local/bin:/usr/bin:/home/johnstonem/.pyenv/versions/3.11.9/bin:/home/johnstonem/.pyenv/bin:/home/johnstonem/.local/bin:/usr/bin:/home/johnstonem/.pyenv/versions/3.11.9/bin:/home/johnstonem/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/WINDOWS/CCM/:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/system32/config/systemprofile/AppData/Local/Microsoft/WindowsApps:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files (x86)/Microsoft SQL Server/160/DTS/Binn/:/mnt/c/Program Files/Azure Data Studio/bin:/mnt/c/Program Files/PuTTY/:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Users/mitchelj/AppData/Local/Programs/Python/Python311/Scripts/:/mnt/c/Users/mitchelj/AppData/Local/Programs/Python/Python311/:/mnt/c/Users/mitchelj/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/mitchelj/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Program Files/R/R-4.3.1/bin:/mnt/c/Program Files (x86)/GnuWin32/bin:/snap/bin:/opt/mssql-tools18/bin:/opt/mssql-tools18/bin:/opt/mssql-tools18/bin
  • SHELL: /bin/bash
  • LANG: C.UTF-8
  • PWD: /mnt/c/test

Contents of Pipfile ('/mnt/c/test/Pipfile'):

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.11"
python_full_version = "3.11.9"
@ds-mitchell-johnstone
Copy link
Author

ds-mitchell-johnstone commented Jul 2, 2024

This bug can be circumvented by either writing a bash script with the desired command and executing that from pipenv run, or by making a proxy file in the PATH that calls the desired shell built-in.

e.g. for cd

cd $@

Both are valid workarounds, but both require additional files written on my system.


On further testing, this does NOT evade the issue for more complex issues, as the $@ takes any other commands put after the cd command and errors from passing too many args to cd. :(

And the cd wouldn't actually change the directory properly with a proxy file, as a new shell would be created, so the pipenv virtual environment wouldn't actually change the directory.

@matteius matteius added triage Contributor Candidate The issue has been identified/triaged and contributions are welcomed/encouraged. labels Aug 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Contributor Candidate The issue has been identified/triaged and contributions are welcomed/encouraged. triage
Projects
None yet
Development

No branches or pull requests

2 participants