sudo python runs old python version

后端 未结 4 1067
孤城傲影
孤城傲影 2021-01-03 01:01

I have installed python 2.7.3 on CentOS 6 with thse instructions

http://villaroad.com/2010/10/rolling-python-2-6-2-on-centos-5-3/

I have added aliases to ba

相关标签:
4条回答
  • 2021-01-03 01:23

    The problem is that your $PATH is changing upon execution.

    You can either use sudo -E:

    -E The -E (preserve environment) option will override the env_reset option in sudoers(5)). It is only available when either the matching command has the SETENV tag or the setenv option is set in sudoers(5).

    ... or you can specify the full path to your executable. sudo `which python`.

    (It looks like you used alias per the docs. This method would handle that too.)

    0 讨论(0)
  • 2021-01-03 01:37

    sudo doesn't use your shell to run commands, it just execs the command directly. This means (a) there's nothing that sources root's bash_profile, so it doesn't matter what you put there, and (b) shell aliases wouldn't matter even if they were set.

    So, if you want to use aliases to specify a different python than the one that's on your PATH, you can't use sudo python to run that same one.

    The easiest, and probably safest, fix is to be explicit: run sudo /path/to/other/python. If you need to do this often enough, you can always create an alias for that.

    If you really want to, you can make sudo use a shell. Either explicitly generate the bash command line that runs python, or (more simply) just use the -s or -i flags. (In this case, if you're trying to get root's ~/.bash_profile run, -s won't do it, but -i will.) But sudoing shells is not as safe as sudoing programs. Your sudoers may even be explicitly configured to prevent you from doing it. (You can fix that with visudo if you want, but opening a security hole without understanding exactly what you're opening is generally considered a bad thing to do.)

    0 讨论(0)
  • 2021-01-03 01:42

    The bin directory is probably referencing the old version of Python

    > ls -la /usr/bin/python
    lrwxrwxrwx 1 root root 9 Dec 21  2013 /usr/bin/python -> python2.7
    

    Redirect the default python version to the one you want.

    0 讨论(0)
  • 2021-01-03 01:44

    I would suggest using sudo -i when calling the script. Straight from man sudo:

    -i [command]

    The -i (simulate initial login) option runs the shell specified in the passwd(5) entry of the target user as a login shell. This means that login-specific resource files such as .profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution. Otherwise, an interactive shell is executed. sudo attempts to change to that user's home directory before running the shell. It also initializes the environment, leaving DISPLAY and TERM unchanged, setting HOME , MAIL , SHELL , USER , LOGNAME , and PATH , as well as the contents of /etc/environment on Linux and AIX systems. All other environment variables are removed.

    0 讨论(0)
提交回复
热议问题