Nano Hash - криптовалюты, майнинг, программирование

Надежная линия Python3 shebang?

Есть ли способ написать строку shebang так, чтобы она нашла интерпретатор Python3, если он есть?

Наивно, из PEP 394 я ожидал, что #!/usr/bin/env python3 должен работать.

Однако я заметил, что в некоторых системах, где python — это Python3, они не предоставляют псевдоним python3. В этих системах вам нужно будет использовать #!/usr/bin/env python, чтобы получить Python3.

Есть ли надежный способ справиться с этой двусмысленностью? Есть ли какой-нибудь способ написать строку shebang так, чтобы она использовала python3, если она присутствует, но пробовала python, если нет? (Требовать, чтобы конечные пользователи вручную исправили свои системы, чтобы добавить псевдоним python3, не является идеальным.)


  • Если его нет, вы всегда можете написать небольшой скрипт bash для проверки доступности с помощью python -V или тестирования кода возврата python и python3, а затем вызвать приложение оттуда. 21.06.2019

Ответы:


1

Единственный способ, которым я могу это сделать, - предоставить собственную оболочку shebang для вызова правильной версии python. Если вы можете надежно разместить обертку в заданном месте, вы можете сделать это:

Создайте сценарий-оболочку, например. /USR/локальные/бен/python3_wrapper

#!/bin/bash
cmd="$1"
shift
if which python3 >/dev/null; then
  exec python3 "$cmd" "$@"
elif which python >/dev/null; then
  version=$(python --version 2>&1 | cut -d' ' -f2 | cut -d. -f1)
  if [[ "$version" == "3" ]]; then
    exec python "$cmd" "$@"
  else
    echo "python is version $version (python3 not found)"
  fi
else
  echo "python3 nor python found"
fi
exit 1

Затем используйте следующий шебанг в своем сценарии:

#!/usr/local/bin/python3_wrapper

Другой вариант — вызвать скрипт python, который работает как в версии 2, так и в версии 3, который затем вызывает ваш скрипт python3, используя правильный исполняемый файл. Если ваш скрипт называется script.py, переименуйте его в script.py3 и создайте script.py следующим образом:

#!/usr/bin/env python

import os
import sys

if sys.version_info.major == 3:
    exe = "python"    # python is version 3.x
else:
    exe = "python3"   # python is not version 3.x so try python3
try:
    os.execvp(exe, [exe, sys.argv[0]+'3'] + sys.argv[1:])
except:
    print(exe, "not found")
sys.exit(1)
13.02.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..