Существует ли портативный способ вывести текущий интерпретатор Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Существует ли портативный способ вывести текущий интерпретатор Python?

Сообщение Anonymous »

У меня есть скрипт Python, который пытается запустить подпроцесс, запускающий тот же интерпретатор, что и текущий интерпретатор. Интерпретатор подпроцесса должен быть тем же исполняемым файлом, что и текущий интерпретатор. В частности, это должна быть правильная версия, даже если установлено несколько версий Python.
Вот несколько решений, которые почти работают, и причины, по которым они не совсем полны:
  • Использование sys.executable: Ожидаемый результат sys.executable отличается от его фактической реализации. Он использует потенциально неправильные пути из sys.argv и переменной среды PATH. Например, если sys.argv == [''] и PATH содержит каталог bin, в котором есть python3, sys.executable вернет путь к нему. python3, даже если он НЕ совпадает с текущим интерпретатором (т.е. он относится к более новой версии, чем текущий интерпретатор).
  • Вывод пути из os.__file__< /код>: этот подход отлично работает для систем Linux, где путь к интерпретатору можно (обычно) безопасно вывести из этого пути (

    Код: Выделить всё

    os.__file__
    может быть чем-то вроде /usr/lib/python3.8/os.py, поэтому мы можем сделать вывод, что правильный интерпретатор — /usr/bin/python3.8). Однако этот вывод безопасен только в том случае, если процесс установки текущего интерпретатора Python был «нормальным» (IE это не работает для встроенных установок, пользовательских сборок Python, установленных в нестандартные каталоги и т. д.). Кроме того, я не уверен, что можно реализовать этот вывод независимо от операционной системы.
Теоретически идеальная реализация будет использовать Зависящие от ОС утилиты для определения пути к текущему исполняемому файлу. Скорее всего, это будет означать чтение /proc/self/exe или /proc/{pid}/exe в Linux или GetModuleFileName(GetCurrentModule()) в Windows. Есть ли более простой способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/792 ... nterpreter
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»