Версии Pyenv Python не работают в Linux сценариях оболочки - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь создать сценарий оболочки на Linux (Ubuntu), как представлено в Автоматизировать скучные вещи с помощью Python

Я создал все файлы и * Скрипт 1034 * и когда я пытаюсь запустить его из Da sh в Ubuntu, он запускает скрипт Python с Python версией, которой нет в моей глобальной версии pyenv. Из-за этого я не могу использовать дополнительные модули, установленные через pip.

My Python версии (как указано в версиях pyenv)

  system
* 3.8.1 (set by /home/tomek/.python-version)
  3.8.1/envs/blog_env
  3.8.1/envs/ll_env
  3.8.1/envs/mcam_env
  3.8.1/envs/money_value
  3.8.1/envs/pizzaenv
  3.8.1/envs/project_2
  blog_env
  ll_env
  mcam_env
  money_value
  pizzaenv
  project_2

версия 3.8.1 установлена ​​как глобальная с пиенв. Некоторые подробности:

which python && which pip && python -V
/home/tomek/.pyenv/shims/python
/home/tomek/.pyenv/shims/pip
Python 3.8.1

Мой. sh (находится в моем домашнем каталоге) файл выглядит следующим образом:

#!/usr/bin/env bash
python3 /home/tomek/automate/MCAM/mClip.py 'agree'
bash

Мой файл .desktop (находится в .local / share / Applications необходимо запустить скрипт через Da sh в Ubuntu) выглядит так

[Desktop Entry]
Name=mClip
Exec=gnome-terminal -- /home/tomek/mClip.sh
Type=Application
Categories=GTK;GNOME;Utility;

, а моя первая строка в скрипте Python выглядит следующим образом:

#!/usr/bin/env python

Итак, когда я запустить мой скрипт из оболочки, он работает нормально, но когда я запускаю его через Da sh, он получает ошибку из-за отсутствия модулей, поэтому он пытается запустить его в другой среде Python. Я пытался отладить этот скрипт так же, как пытался запустить его, поэтому я изменил. sh файл таким образом

#!/usr/bin/env bash
which python && which pip && python -V && python3 -V
bash

, и я получаю этот результат

/usr/bin/python
/usr/bin/pip
Python 2.7.17
Python 3.6.9

Когда я тогда запустить этот код в том же окне оболочки (!), которое дает мне

/home/tomek/.pyenv/shims/python
/home/tomek/.pyenv/shims/pip
Python 3.8.1
Python 3.8.1

Я пытался также запустить pyenv в этом. sh сценарии, чтобы увидеть, каков результат, но он выдает ошибку, что команда pyenv не найден. Я пытался везде искать ответы, но ни один из них не помог мне.

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Я нашел ответ на свой вопрос.

Установка и настройка pyenv как пользователя не заставит его работать для sh файлов, запущенных из Ubuntu Da sh. Когда вы конфигурируете pyenv, вы конфигурируете bash файлы конфигурации (например, .bashr c).

Эти файлы конфигурации загружаются только при запуске bash, а не при запуске какой-либо другой программы, такой как как sh (даже если bash вызывается через имя sh). И он загружается только тогда, когда bash является интерактивным.

Вы должны запускать виртуальную среду напрямую, как это (это расположение по умолчанию для установки pyenv).

Например, проверка python версия:

/home/<username>/.pyenv/versions/<environment_name>/bin/python -V

Возвращаясь к моему делу. Мой sh файл теперь выглядит следующим образом:

#!/usr/bin/env bash
python -V
/home/tomek/.pyenv/versions/mcam_env/bin/python -V
bash

, и в результате получается

Python 2.7.17 #This is default Python version for root
Python 3.8.1 #This is my pyenv Python version

Дальнейшее чтение:

0 голосов
/ 22 марта 2020

В вашем скрипте Python ваша первая строка говорит #!/usr/bin/env python, поэтому я думаю, что это перенаправляет на /usr/bin/python, что является неправильным. Не могли бы вы попробовать #!/usr/bin/env python3?

...