Установка версии Python из командной строки

Я пытаюсь запустить R-скрипт из командной строки, используя Rscript. Сценарий R вызывает некоторый код Python и отлично работает при интерактивном запуске. Однако, когда я вызываю его из Rscript, я получаю некоторые ошибки с gdal. Я считаю, что ошибки связаны с python 3 и 2. Например, запуск следующей команды в интерактивном сеансе R:

system("python --version)

урожаи

Питон 2.7.9

при выполнении «той же» команды из оболочки:

$ python --version

урожаи

Python 3.5.1 :: Continuum Analytics, Inc.

Как я могу указать свои $ Rscript "foo.R" вызовы на python 2.7.9?


person jsta    schedule 07.04.2016    source источник
comment
Разве вы не можете использовать shebang в своем коде Python, чтобы указать, какую версию следует использовать? Что-то вроде этого: #!/bin/env python2 или #!/bin/env python3. Это должно быть добавлено в начало вашего кода Python.   -  person Dataman    schedule 07.04.2016
comment
используйте python3 явно как имя команды   -  person Antti Haapala    schedule 07.04.2016
comment
Как вы запускали интерактивные сеансы R? Я подозреваю, что у него другая переменная среды PATH, чем у оболочки. Можете ли вы распечатать переменную среды PATH из командной строки и из сеанса R?   -  person Robᵩ    schedule 07.04.2016
comment
@AnttiHaapala @Dataman Я вызываю некоторые стандартные gdal скрипты. Я не думаю, что хочу их редактировать (особенно gdal_polygonize.py)   -  person jsta    schedule 07.04.2016
comment
Как запустить сеанс R?   -  person Robᵩ    schedule 07.04.2016
comment
RStudio... но я не понимаю, какое это имеет значение.   -  person jsta    schedule 07.04.2016
comment
Это важно, потому что он получает другой набор переменных среды. Как запустить RStudio?   -  person Robᵩ    schedule 07.04.2016
comment
Средство запуска панели задач Ubuntu   -  person jsta    schedule 07.04.2016
comment
Можете ли вы ввести which python и whereis python и сообщить нам, каковы результаты?   -  person Dataman    schedule 07.04.2016
comment
Другим вариантом может быть установка PYTHONPATH с помощью: export PYTHONPATH=*path_to_the_desired_python_version* на желаемую версию.   -  person Dataman    schedule 07.04.2016
comment
Вы понимаете, почему вы получаете то, что получаете из своего ответа?   -  person Dataman    schedule 07.04.2016


Ответы (2)


Когда вы вызываете $ python --version или $ Rscript -e 'system("python --version")' из командной строки оболочки, вы работаете в виртуальной среде Python, возможно, созданной virtualenv. В частности, вы выполняете /home/foo/miniconda3/bin/python

Когда вы запускаете system("python --version") из RStudio, вы получаете версию системы по умолчанию. В частности, вы выполняете /usr/bin/python.

Как я могу указать свои $ Rscript "foo.R" вызовы на python 2.7.9?

Это зависит от того, как вы вошли в свою виртуальную среду Python. Если он был создан virtualenv, просто деактивируйте его:

$ deactivate
$ Rscript -e 'system("python --version")'
2.7.9

РЕДАКТИРОВАТЬ: похоже, вы используете виртуальные среды, созданные miniconda. Если это так, вы можете использовать системный Python по умолчанию, отредактировав переменную среды PATH. То, как вы редактируете свой PATH, зависит от того, как долго вы хотите, чтобы ваше изменение действовало.

  • Чтобы ваше изменение было потеряно только для одной команды, попробуйте следующее:

    $ PATH="$(echo "$PATH" | sed -e s,:/usr/local/sbin,,)" Rscript -e 'system("python --version")' 
    
  • Чтобы ваше изменение длилось в течение одного сеанса оболочки, попробуйте следующее:

    $ PATH="$(echo "$PATH" | sed -e s,:/usr/local/sbin,,)"
    $ python --version
    $ Rscript -e 'system("python --version")' 
    
  • Чтобы навсегда изменить PATH, отредактируйте файл $HOME/.bashrc соответствующим образом. Вам нужно будет начать новый сеанс терминала, чтобы это подействовало.

person Robᵩ    schedule 07.04.2016
comment
Вы такой превосходный редактор, если вы понимаете, о чем я? ;) - person Dataman; 07.04.2016
comment
Я понимаю, что пути разные. Однако я понятия не имею, что такое virtualenv. $ virtualenv › Программа 'virtualenv' в настоящее время не установлена. Вы можете установить его, набрав: sudo apt-get install virtualenv - person jsta; 07.04.2016
comment
@jsta - это означает, что вы не использовали virtualenv для создания виртуальной среды Python. Как вы создали /home/foo/miniconda3 и как вы сделали его первым в вашем PATH? Как бы вы это ни сделали, это то, что вы должны отменить. - person Robᵩ; 07.04.2016

Решение заключалось в том, чтобы вставить вызов библиотеки methods в мой сценарий R и создать/загрузить среду Python 2 с помощью команды:

$ conda create --name python2 python=2
$ source activate python2

См.:
Rscript не загружает пакет методов, а R — почему и каковы последствия?
и
http://conda.pydata.org/docs/py2or3.html

person jsta    schedule 07.04.2016