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

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

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

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

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

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

Ответ 1

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

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

#!/usr/bin/python2.7

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

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

pywin https://pypi.python.org/pypi/pywin

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

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

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

Чтобы запустить example.py, введите в консоль

python example.py

но он также может быть запущен за клик.

это мой файл 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

default - 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 

to

C:\python26

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

Вы также можете запустить файлы python за klick

то сделайте следующее:

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

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

Ответ 2

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

C:\Python26\Python.exe thescript.py

Или аналогичный.

Что делает virtualenv, так это то, что он дает вам множество отдельных виртуальных установок одной и той же версии python. Это совершенно другая проблема, и, следовательно, это никоим образом не поможет.

Ответ 3

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

http://pypi.python.org/pypi/virtualenv

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

Ответ 4

Для тех, кто использует окна, если вы не прочь использовать 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-aliases

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

Set-ExecutionPolicy RemoteSigned

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

Ответ 5

Используйте 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

Ответ 6

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

Ответ 8

не уверен, что это то, что вы хотите, но я долгое время жил с этим http://www.portablepython.com/

Ответ 9

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

Вот как вы можете заставить 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', '.']

Ответ 10

Я использую по крайней мере 3 или 4 версии Python на своих компьютерах (Windows). Установщики из http://python.org/ автоматически помещали их в:

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

и

c:\Python24

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

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

Ответ 11

Вы можете указать нужную версию в строке shebang. Я просто столкнулся с этим, когда у моего виртуального парня, созданного мной, был Python 2.6 в /usr/bin/python 2.6, и мне понадобилось 2.7 для нескольких функций. Он установил его для меня на /usr/bin/python 2.7.

Мой старый shebang:

#!/usr/bin/env python

перестала работать, потому что /usr/bin/python была ссылкой на /usr/bin/python 2.6. Что заставило проблему устранить проблему и работало в Windows, Linux и OSX, было изменено действие shebang на:

#!/usr/bin/env python2.7

Он должен работать для любой версии, я полагаю.

Ответ 12

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

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

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

Ответ 13

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

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

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

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

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

python_3_64bit_shortcut your_program.py