如何在不卸载的情况下使用多个版本的Python

时间:2012-05-05 17:33:47

标签: python python-3.x version nltk

我面临着一种独特的情况,虽然有些微不足道但却很痛苦。

我需要使用Python 2.6.6,因为NLTK没有移植到Python 3(这是我可以收集的)。

在一个不同的代码中(它同时工作),有一个集合计数器函数,它只在Python 3中可用,但在Python 2.6.6中不可用。

因此,每次我在两个代码之间切换时,我需要安装&卸载版本。这是浪费时间。

有关我如何指定要使用的版本的任何建议?

15 个答案:

答案 0 :(得分:17)

安装Python 3

Python 3.3及更高版本将py.exe放入windows文件夹。 [link] 此可执行文件用于确定文件第一行的python版本:

#!/usr/bin/python2.7

将使用Python 2.7执行。 安装其他Python版本后,必须安装Python 3版本。

其他资源:https://docs.python.org/3/using/windows.html#customization

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

旧解决方案

我猜你使用的是Windows。我用黑客解决了这个问题:

每次我在Windows上启动python时都会使用python.bat。 这将启动一个python.py,它在python版本的#!之后分析文件的头部。

要启动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 32的python相同。

您可能还想按 klick

启动python文件

然后这样做:

点击.py文件 - &GT;打开用 - &GT;选择C:\ bin \ python.bat

如果您遇到问题,请与我联系或发表评论。

答案 1 :(得分:9)

您只需在不同的目录中安装多个版本,然后使用您要使用的Python版本运行python程序。像这样:

C:\Python26\Python.exe thescript.py

或类似。

virtualenv所做的是它为你提供了许多单独的“虚拟”安装相同的python版本。这是一个完全不同的问题,因此它无论如何也无济于事。

答案 2 :(得分:6)

对于那些使用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-aliases

为了成功加载您创建该链接的配置文件,您可能需要更改执行策略。

Set-ExecutionPolicy RemoteSigned

应该可以解决问题,但如果您想了解有关执行政策的更多信息,可以访问以下链接:https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_execution_policies

答案 3 :(得分:5)

使用virtualenv,它允许您创建动态python环境。在这里查看python的页面。

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

相关回答关于在windows上安装virtualenv中的包的问题(与系统范围相对)Can I install Python windows packages into virtualenvs?

答案 4 :(得分:2)

使用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

答案 5 :(得分:1)

你应该研究virtualenv。我从this博客文章中了解了这一点,其中讨论了pipfabric,这也是Python开发人员非常有用的工具。

答案 6 :(得分:1)

此页面的实现collections.Counter适用于Python 2.6:

答案 7 :(得分:1)

不确定这是你想要的,但我过去常常忍受这种情况http://www.portablepython.com/

答案 8 :(得分:1)

OP请求有点过时,特别是现在NLTK确实有py3.x端口。见Install nltk 3.0 on Ubuntu 13.10 using 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', '.']

答案 9 :(得分:0)

我在我的机器上使用至少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:\Python26c:\Python24。在c:\Python32\中,exe被重命名为py.exe。这样,python some.py启动Python 2.7,py another.py启动Python 3.2。

答案 10 :(得分:0)

您可以在shebang行中指定所需的版本。我刚刚遇到这个问题,当我的Ops人设置的VM在/usr/bin/python2.6中有Python 2.6时,我需要2.7一些功能。他在/usr/bin/python2.7上为我安装了它。

我的老shebang:

#!/usr/bin/env python

停止工作,因为/ usr / bin / python是/usr/bin/python2.6的链接。解决问题的方法,以及跨Windows,Linux和OSX的工作,正在将shebang改为:

#!/usr/bin/env python2.7

我相信它适用于任何版本。

答案 11 :(得分:0)

如果您正在讨论shell,就像在Linux中一样,如果您安装了python 3,则可以使用python3命令单独调用它。只使用python调用Python 2。

至少这是我使用Ubuntu系统的经验,我还没有使用其他Linux环境。

我意识到这个问题差不多已经有一年了,但是NLTK已经被移植到Python 3了(至少在写这篇文章时是这样)。

答案 12 :(得分:0)

查看WinPython,一个适用于Windows的便携/可安装的python发行版。

  

便携式:预先配置,它应该在Windows下的任何机器上开箱即用(没有任何要求),并且包含WinPython的文件夹可以移动到任何位置(本地,网络或可移动驱动器)大多数应用程序设置

     

灵活:可以安装(或者我应该根据需要编写“use”,因为它是可移植的)尽可能多的WinPython版本(如隔离和自我一致的环境),即使这些版本运行不同Python(2.7,3.3)版本或同一台机器上的不同架构(32位或64位)

它还允许您轻松注册和取消注册给定的python版本作为系统默认版本。

但即使是可移植的,你也可以创建python可执行文件的快捷方式并将其放在路径中的某个位置。只需将不同版本的快捷键命名为不同的名称即可。然后你可以使用:

python_3_64bit_shortcut your_program.py

答案 13 :(得分:0)

您可以使用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

答案 14 :(得分:0)

最简单的解决方案:重命名路径所在的文件,例如: enter image description here