2

У меня есть пакет Python, который отлично работает, когда я запускаю как python -m myproject . Однако когда я запускаю как nohup python -m myproject , я получаю ImportError . Более того, когда я запускаю как nohup python3 -m myproject , он работает нормально.

Похоже, проблема в том, что мой python имеет псевдоним python3, тогда как nohup каким-то образом использует нестандартный питон. С чего бы это?

1 ответ1

2

Ваша оболочка (вероятно, bash) имеет псевдоним, назначенный таким образом, что всякий раз, когда вы вводите python в начале команды, он меняет его на /usr/bin/python3 . Мне трудно сказать, почему у вас есть этот псевдоним. Возможно, ваш системный администратор хочет, чтобы все использовали Python 3 вместо Python 2 по умолчанию, и это была попытка сделать это.

Ваш /usr/bin/python является символической ссылкой на двоичный файл Python 2. Это кажется вполне нормальным; она часто встречается на многих дистрибутивах Linux (например, Debian) для python ссылаться на Python 2, потому что Python 3 не является популярным еще недостаточно. Это не всегда так; в Arch Linux python ссылается на Python 3.

Итак, если бы мне пришлось угадывать, я бы сказал, что менеджер пакетов вашей системы установил символическую ссылку с /usr/bin/python на /usr/bin/python2.7 потому что его политика заключается в том, чтобы люди использовали Python 2 по умолчанию , Но кто-то еще, кто высказался по поводу настройки вашей системы, решил, что они хотят использовать Python 3 по умолчанию, поэтому они установили этот псевдоним.

Как видите, псевдоним не работает все время. Когда вы nohup python , оболочка не раскрывает ваш псевдоним, а просто передает строку python в качестве аргумента в команду nohup . Затем команда nohup должна выяснить, что означает python , и все, что она делает, это посмотреть ваш PATH; он не знает о ваших псевдонимах оболочки. Он найдет /usr/bin/python и запустит Python 2 для вас.

Вы можете прочитать руководство по вашей оболочке, чтобы узнать, какие файлы она запускает при запуске (например, .bashrc и тому подобное). Это поможет вам выяснить, почему ваша оболочка имеет этот псевдоним для Python 3. Посмотрите на строку, как это:

alias python=python3

Вы можете прочитать о менеджере пакетов системы, чтобы выяснить, как посмотреть, какие файлы принадлежат каким пакетам, и это может помочь вам выяснить, почему существует символическая ссылка для Python 2. Просто спросите менеджера пакетов, какому пакету принадлежит ссылка /usr/bin/python .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .