Skip to content

python_selector checks if found python command is valid#275

Merged
kripken merged 1 commit intoemscripten-core:masterfrom
trzecieu:trzeci/python_selector_pyenv
Jun 13, 2019
Merged

python_selector checks if found python command is valid#275
kripken merged 1 commit intoemscripten-core:masterfrom
trzecieu:trzeci/python_selector_pyenv

Conversation

@trzecieu
Copy link
Copy Markdown
Collaborator

@trzecieu trzecieu commented Jun 13, 2019

Addresses emscripten-core/emscripten#8792

I've found what's the reason of the strange behaviour of last changes (#273).

In order to reproduce this problem it's needed:

  • To don't have python3 installed in system
  • To have pyenv with installed at least one version from each family, like:
pyenv install 3.7.0
pyenv install 2.7.15
  • To activate a version from python2
pyenv local 2.7.15

Then we have a strange situation that python3 is available as a command, but it's just a mock for pyenv:

➜ pyenv versions
  system
* 2.7.15 (set by /home/trzeci/Projects/emsdk/.python-version)
  3.7.0

➜ which python3
~/.pyenv/shims/python3

➜ python3 --version
pyenv: python3: command not found

The `python3' command exists in these Python versions:
  3.7.0

➜ ./emsdk --help        
pyenv: python3: command not found

The `python3' command exists in these Python versions:
  3.7.0

As you see in an example above I didn't even call emsdk script, just tried to execute python3 --version and I've got exactly the same error. The problem of pyenv is that even if python3 isn't active it's available in the system PATH.
Calling ./emsdk --help get's the same error, as python3 was used.

At the moment this entirely breaks logic in python_selector and in pyenv working command is indistinguishable from stub python command.

@kripken: A couple of ways to go from here:

  • revert logic of python_selector and advertise mac users to use python3
  • keep logic and advertise pyenv users to use python3
  • This PR: extend logic of python_selector by checking if found python command is valid (for the instance by calling python --version), this will filter out false positive matches that coming from pyenv

After patch:

➜ pyenv versions        
  system
* 2.7.15 (set by /home/trzeci/Projects/emsdk/.python-version)
  3.7.0

➜ which python3 
~/.pyenv/shims/python3

➜ python3 --version
pyenv: python3: command not found

The `python3' command exists in these Python versions:
  3.7.0


➜ ./emsdk --help
 emsdk: Available commands:

   emsdk list [--old] [--uses]  - Lists all available SDKs and tools and their
                                  current installation status. With the --old
   ....

As you can see python3 --version command fails as it was, but that's expected behaviour. What's important is that ./emsdk --help gets executed as python_selector recognizes a stub.

Comment thread python_selector
@kripken kripken merged commit 29b91e3 into emscripten-core:master Jun 13, 2019
@kripken
Copy link
Copy Markdown
Member

kripken commented Jun 13, 2019

And thanks @trzecieu for the quick fix!

@trzecieu trzecieu deleted the trzeci/python_selector_pyenv branch June 13, 2019 22:54
@sbc100
Copy link
Copy Markdown
Collaborator

sbc100 commented Jul 3, 2019

I think if you put something called python3 in your PATH then you should expect people to be able to try to use it.

This seems like a bug in pyenv that we shouldn't have to deal with here.

I mean what if I symlink /usr/bin/python3 to /usr/bin/bash.. --version will still work, but clearly we don't have to handle that case where python3 is broken.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants