Подтвердить что ты не робот

Как сообщить Python script использовать определенную версию

Как я могу в модуле main.py(предположительно) сказать Python, какой интерпретатор использовать? Я имею в виду: если я хочу, чтобы конкретный script использовал версию 3 Python для интерпретации всей программы, как это сделать?

Бонус: как это повлияет на virtualenv? Правильно ли я думаю, что если я создам виртуальную машину для своей программы, а затем скажу ей использовать другую версию Python, я могу столкнуться с некоторыми конфликтами?

4b9b3361

Ответ 1

Вы можете привязать верхнюю строку к script, но это будет работать только при выполнении. /my _program.py.

Если вы выполняете как python my_program.py, тогда будет использоваться любая версия Python, возвращающая which python.

В re: to virtualenv используйте: virtualenv -p /usr/bin/python3.2 или что угодно, чтобы настроить его на использование исполняемого файла Python.

Ответ 2

Возможно, не совсем то, что вы просили, но я считаю, что это полезно для начала моих программ:

import sys

if sys.version_info[0] < 3:
    raise Exception("Python 3 or a more recent version is required.")

Ответ 3

Я бы использовал shebang #!/usr/bin/python (первая строка кода) с серийным номером Python в конце;)

Это то же самое, когда вы хотите запустить Python из командной строки Linux.

Ответ 4

В то время как OP может работать на платформе * nix, этот ответ может помочь платформам non * nix. Я не испытал работу подхода shebang в Microsoft Windows.

Перефразировано: строка shebang отвечает на ваш вопрос " внутри моего script", но я верю только в Unix-подобные платформы. Несмотря на то, что это оболочка Unix, вне script, которая фактически интерпретирует строку shebang, чтобы определить, какую версию интерпретатора Python вызывать. Я не уверен, но я считаю, что решение не решает проблему для пользователей платформы Microsoft Windows.

В мире Microsoft Windows упростить запуск конкретной версии Python без настройки переменных окружения, специально для каждой установленной версии Python, является просто префикс python.exe с помощью путь, из которого вы хотите его запустить, например C:\Python25\python.exe mymodule.py или D:\Python27\python.exe mymodule.py

Однако вам нужно будет рассмотреть переменные среды PYTHONPATH и другие PYTHON..., которые указывают на неправильную версию библиотек Python.

Например, вы можете запустить: C:\Python2.5.2\python.exe mymodule

Тем не менее переменные окружения могут указывать на неправильную версию:

PYTHONPATH = D:\Python27

PYTHONLIB = D:\Python27\lib

Нагрузки ужасной забавы!

Таким образом, в Windows не виртуальный путь будет заключаться в использовании командного файла, который настраивает среду и вызывает конкретный исполняемый файл Python, префикс python.exe с помощью пути, в котором он находится Таким образом, у вас есть дополнительные сведения, которые вам нужно будет управлять; например, используя аргументы командной строки для любой из команды "start" или "cmd.exe" для "сохранения и замены" консольной "среды", если вы хотите, чтобы консоль закрывалась после выхода приложения.

Ваш вопрос заставляет меня думать, что у вас есть несколько модулей Python, каждый из которых ожидает определенную версию Python. Это может быть разрешено "внутри" script с помощью модуля запуска, который использует модуль subprocess. Вместо вызова mymodule.py вы вызываете модуль, который вызывает ваш модуль; возможно launch_mymodule.py

launch_mymodule.py

import subprocess
if sys.argv[2] == '272':
  env272 = {
    'PYTHONPATH': 'blabla',
    'PYTHONLIB': 'blabla', }
  launch272 = subprocess.Popen('D:\\Python272\\python.exe mymodule.py', env=env272)

if sys.argv[1] == '252'
  env252 = {
    'PYTHONPATH': 'blabla',
    'PYTHONLIB': 'blabla', }
  launch252 = subprocess.Popen('C:\\Python252\\python.exe mymodule.py', env=env252)

Я не тестировал это.

Ответ 5

Вы не можете сделать это в программе Python, потому что оболочка решает, какую версию использовать, если вы используете линию shebang.

Если вы не используете оболочку со строкой shebang и просто введите python myprogram.py, она использует версию по умолчанию, если вы не решите конкретно, какую версию Python при вводе pythonXXX myprogram.py какую версию использовать.

Как только ваша программа Python запущена, вы уже решили, какой исполняемый файл Python использовать для запуска программы.

virtualenv предназначен для разделения версий и сред python, он определенно существует для устранения конфликтов.

Ответ 6

Работая с разными версиями Python для Windows,

Я использую этот метод для переключения между версиями.

Я думаю, что это лучше, чем возиться с shebangs и virtualenvs

1) установить желаемые версии Python

2) перейдите в Переменные среды> PATH

(Я предполагаю, что путь версии Python уже добавлен в Env.Vars.> PATH)

3) подавить пути всех версий Python, которые вы не хотите использовать

(не удаляйте пути, просто добавьте суффикс, например "_sup")

4) вызвать питона из терминала

(поэтому Windows пропустит неправильные пути, которые вы изменили, и найдет python.exe по пути, который вы не подавили, и будет использовать эту версию после включения)

5) переключаться между версиями, играя с суффиксами