Как использовать несколько версий 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.
Ответ 7
На этой странице реализована реализация collections.Counter
, которая работает для Python 2.6:
Ответ 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