Как использовать несколько версий Python без удаления

Я столкнулся с уникальной ситуацией, немного тривиальной, но болезненной.

Мне нужно использовать Python 2.6.6, потому что NLTK не портирован на Python 3 (это то, что я мог бы собрать).

В другом коде (который работает одновременно) есть функция счетчика коллекций, которая доступна только в Python 3, но не в Python 2.6.6.

Итак, каждый раз, когда я переключаюсь между двумя кодами, мне нужно устанавливать и удалять версии. Это такая пустая трата времени.

Любые предложения о том, как мне указать, какую версию я хочу использовать?

 Jakob Bowyer05 мая 2012 г., 19:35
Какой ос ???????
 Thai Tran05 мая 2012 г., 19:46
Просто верни путь. Вы можете использовать разные python в окне легко
 Learnerbeaver05 мая 2012 г., 19:38
Windows. Да, это может быть установлено бок о бок. Но, может быть, это глупый вопрос - как вызвать соответствующую версию (оболочку) из кода Python? Когда я говорю запустить модуль, он всегда работает на 3.0, который выдает ошибку для nltk.
 David Heffernan05 мая 2012 г., 19:35
Просто установите несколько версий.
 Mark Byers05 мая 2012 г., 19:36
Python 2 и 3 могут быть установлены бок о бок. Почему вам нужно удалить и переустановить?

Ответы на вопрос(15)

Установите Python 3

Python 3.3 и выше положитьpy.exe в папку Windows. ссылк] Этот исполняемый файл используется для определения версии Python с первой строкой файла:

#!/usr/bin/python2.7

будет выполняться с Python 2.7. Вы должны установить версию Python 3 после установки других версий Python.

Дополнительные ресурсы:https: //docs.python.org/3/using/windows.html#customizatio

Pywin https: //pypi.python.org/pypi/pywi

Старое решение

Думаю, ты используешь окна. Я решил эту проблему с помощью взлома:

Каждый раз, когда я запускаю python на windows, будет использоваться python.bat. Это запускает python.py, который анализирует файл для заголовка после # для версии на питоне.

Для запуска example.py я набираю в консоли

python example.py

но это также можно запустить за Klick.

это мой файл Python C: \ bin \ python.py

#!/usr/bin/env python2
import sys
import os
args = sys.argv
if len(args) <= 1:
    # no arguments
    # start python console
    i = os.system('C:\bin\python2.bat' + " ".join(args[1:]))
    if type(i) != int:
        i = 0
    exit(i)

def analyse(filename, default = ''):
    '''=> '2', '3', default '''
    try:
        f = open(filename)
    except IOError:
        # file not found
        return default
    firstLine = f.readline()
    if firstLine.startswith('#!'):
        if 'python2' in firstLine:
            return '2'
        if 'python3' in firstLine:
            return '3'
        i = firstLine.find(' ')
        if i != -1:
            # analyse from end of path on
            in2 = '2' in firstLine[i:]
            in3 = '3' in firstLine[i:]
            if in2 and not in3:
                return '2'
            if in3 and not in2:
                return '3'
        else:
            # analyse path
            in2 = '2' in firstLine
            in3 = '3' in firstLine
            if in2 and not in3:
                return '2'
            if in3 and not in2:
                return '3'
    return default



no = analyse(args[1], default = '2')
if args[1][-1:] == 'w':
    # python win
    cmd = 'C:\bin\pythonw%s.bat'
else:
    cmd = 'C:\bin\python%s.bat'
i = os.system(cmd % no + ' ' + " ".join(args[1:]))

if type(i) != int:
    i = 0
exit(i)

Это файл C: \ bin \ python.bat

@echo off
C:\bin\python2 C:\bin\python.py %*
rem this may also work:
rem C:\bin\python.py %*

и в каждом файле, который вы запускаете, вы должны поставить либо

#!/bin/env/python3

ил

#!/bin/env/python2

по умолчанию это python2

Затем я добавил эти файлы в папку:

C: \ Bin \ python2.bat

@echo off
C:\python27\python.exe %*

C: \ Bin \ pythonw2.bat

@echo off
C:\python27\pythonw.exe %*

C: \ python3.bat

@echo off
C:\python32\pythonw.exe %*

C: \ Bin \ pythonw3.bat

@echo off
C:\python32\pythonw.exe %*

Если вместо этого вы используете python26, если python27, вам нужно изменить

C:\python27 

К

C:\python26

и так далее. То же самое с python, не использующим python 32.

Вы также можете запускать файлы Python для Klick

затем сделай это:

щелкните правой кнопкой мыши на файле .py -> откройте с помощью -> выберите C: \ bin \ python.bat

Если у вас возникли проблемы, свяжитесь со мной или оставьте комментарий.

 Lennart Regebro06 мая 2012 г., 08:53
Отличное решение для взлома Windows.
 User27 мар. 2013 г., 16:21
Если вы установите Python 3 в качестве последней версии, он распознает#! под Windows

кто использует Windows, если вы не против использования PowerShell, вы можете установить Python 2 и 3 отдельно, как указано в других ответах. Тогда вы можете сделать это:

Set-Alias python27 [some path]\python27\python.exe 
Set-Alias python33 [some path]\python33\python.exe

Чтобы создать псевдоним для запуска каждой версии.

Сохранение псевдонимов описано в этой ссылке:https: //msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_aliases#saving-aliase

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

Set-ExecutionPolicy RemoteSigned

должен сделать свое дело, но если вы хотите узнать больше о политиках выполнения, вы можете перейти по этой ссылке:https: //msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_execution_policie

 eryksun26 мар. 2014 г., 23:38
Для cmd.exe используйте Doskey.com (это действительно PE exe, а не DOS com). Консоль Windows поддерживает псевдонимы, связанные с именем образа каждого присоединенного процесса. Вы можете загрузить псевдонимы из файла, используя Doskey's/macrofile вариант. Например, файл[cmd.exe] раздел может иметь строкуpython3=C:\Python34\python.exe $*. Добавьте команду doskey в скрипт cmd, загруженный изAutoRun значение вHKCU\Software\Microsoft\Command Processor. Вы также можете добавить[python.exe] раздел для псевдонимов в интерактивном режиме.

а затем запускаете программу python с той версией Python, которую вы хотите использовать. Вот так

C:\Python26\Python.exe thescript.py

Или похожие

То, что делает virtualenv, - это то, что он дает вам много отдельных «виртуальных» установ та же версия Python. Это совершенно другая проблема, и, следовательно, она вам никак не поможет.

 LarsH19 дек. 2013 г., 23:03
Если вы делаете это, знает ли запущенный вами питон, чтобы искать в соответствующей папке пакеты и т. Д.? Или Python 2.6 будет выглядеть в C: \ Python33 \ Scripts, потому что это то, что находится в моем PATH?
 Thomas K05 мая 2012 г., 22:10
virtualenv также может работать с различными версиями Python, поэтому, когда у вас активен virtualenv,python указывает на Python-версию этого virtualenv. Так что это не совсем неактуально, хотя, вероятно, излишне.
 Lennart Regebro19 дек. 2013 г., 23:41
@ LarsH: это знает. Нет, он не будет искать модули в вашем PATH. Он будет выглядеть в вашей PYTHONPATH, поэтому не устанавливайте его глобально.
 Lennart Regebro06 мая 2012 г., 08:51
@ ThomasK: Да, но это не решает его проблему, и нет необходимости решать его проблему. Это так же актуально, как кофе. Это хорошее дополнение, но на самом деле ничего не решает.

collections.Counter, который работает для Python 2.6:

http: //code.activestate.com/recipes/576611

когда у виртуальной машины, которую установил мой Ops, был Python 2.6 в /usr/bin/python2.6, и мне понадобилось 2.7 для некоторых функций. Он установил его для меня по адресу /usr/bin/python2.7

Мой старый Шебанг:

#!/usr/bin/env python

перестала работать, потому что / usr / bin / python была ссылкой на /usr/bin/python2.6. Решение проблемы и работа в Windows, Linux и OSX привели к тому, что шебанг изменился на:

#!/usr/bin/env python2.7

Я думаю, это должно работать для любой версии.

который позволяет создавать динамические среды Python. Проверьте страницу питона здесь.

http: //pypi.python.org/pypi/virtualen

Связанный ответ на вопрос об установке пакетов внутри virtualenv на окнах (в отличие от общесистемных) Могу ли я установить пакеты Python для windows в virtualenvs?

как в linux, если вы устанавливаете python 3, вы можете вызвать его отдельно с помощьюpython3 команда. Python 2 просто вызывается с помощьюpython.

По крайней мере, это мой опыт работы с системами, похожими на Ubuntu, я не использовал другие среды Linux.

Я понимаю, что этому вопросу уже почти год, но NLTK был портирован на Python 3 (или, по крайней мере, это было правдой на момент написания этого).

Virtualenv. Я узнал об этом отэт сообщение в блоге, в котором говорится оpip а такжеfabric, также очень полезные инструменты для разработчика Python.

переименуйте файл в том месте, где находится ваш путь, например:

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

Как только Pythonbrew установлен:

#to install new python versions is as simple as:
pythonbrew install 2.7.2 3.2
#to use a particular version in the current shell:
pythonbrew use 3.2
#to uninstall:
pythonbrew uninstall 2.7.2

s). Установщики изhttp: //python.org автоматически помещает их в:

c:\Python26
c:\Python27
c:\Python32

а такж

c:\Python24

на одной машине. Я в основном использую Python 2.7, потому что некоторые приложения используют wxPython, а также для более старого кода консоли. Этоpython.exe не был переименован. Кстати,Python 2.7 также поддерживаетcollections.Counter.

Thec:\Python26 а такжеc:\Python24 не включены в мой ПУТЬ. Вc:\Python32\, exe был переименован в py.exe. Сюда,python some.py запускает Python 2.7 иpy another.py запускает Python 3.2.

особенно сейчас, когда в NLTK есть порт py3.x. видеть Установите nltk 3.0 в Ubuntu 13.10, используя tar.gz download

Вот как можно заставить Python3 работать с NLTK.

$ sudo apt-get install python3-pip
$ sudo pip3 install pyyaml
$ wget http://www.nltk.org/nltk3-alpha/nltk-3.0a3.tar.gz
$ tar -xzvf nltk-3.0a3.tar.gz
$ cd nltk-3.0a3/
$ sudo python3 setup.py install
$ python3
>>> import nltk
>>> from nltk.corpus import brown
>>> print(brown.sents()[0])
['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', 'Friday', 'an', 'investigation', 'of', "Atlanta's", 'recent', 'primary', 'election', 'produced', '``', 'no', 'evidence', "''", 'that', 'any', 'irregularities', 'took', 'place', '.']

WinPython, хороший переносимый / устанавливаемый дистрибутив Python для Windows.

Портативный: предварительно настроенный, он должен работать "из коробки" на любом компьютере под Windows (без каких-либо требований), и папку, содержащую WinPython, можно переместить в любое место (локальное, сетевое или съемное) с большинством параметров приложения

Гибкая: можно установить (или я должен написать «использовать», поскольку он переносим) столько версий WinPython, сколько необходимо (например, изолированные и самосогласованные среды), даже если эти версии работают под разными версиями Python (2.7, 3.3) или отличаются архитектуры (32-битные или 64-битные) на одном компьютере

Это также позволяет легко регистрировать и отменять регистрацию данной версии Python в качестве версии по умолчанию для системы.

Но даже работая как переносимый, вы можете сделать ярлык исполняемого файла python и поместить его где-нибудь на своем пути. Просто назовите ярлыки разных версий разными именами. Тогда вы можете просто использовать:

python_3_64bit_shortcut your_program.py

который устанавливается вместе с python:

py -2    # default python 2
py -2.7  # specifically python 2.7
py -3    # default python 3
py -3.7  # specifically python 3.7

Если вам нужно выполнить скрипт с определенной версией, вы можете сделать следующее:

py -3.7 my_script.py

Ваш ответ на вопрос