Как мне рассказывал один скрипт на Python, чтобы использовать конкретную версию


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

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

5 52

5 ответов:

вы можете she-bang line верхняя строка скрипта, но это будет работать только при выполнении as ./my_program.py.

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

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

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

import sys

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

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

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

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

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

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

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

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

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

PYTHONPATH = D:\Python27

PYTHONLIB = D:\Python27\lib

нагрузки ужасного веселья!

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

Ваш вопрос заставляет меня поверить, что у вас есть несколько модулей Python, каждый из которых ожидает определенную версию Python. Это может быть разрешимо "внутри" скрипта, имея модуль запуска, который использует подпроцесс модуль. Вместо вызова 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)

Я не проверял это.

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

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

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

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