14

我面临着一个独特的情况,有点微不足道但很痛苦。

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

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

所以,每次我在两个代码之间切换时,我都需要安装和卸载版本。这太浪费时间了。

关于如何指定要使用的版本有什么建议吗?

4

15 回答 15

20

安装 Python 3

Python 3.3 及更高版本将 apy.exe放入 windows 文件夹。[链接] 此可执行文件用于通过文件的第一行确定 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

旧解决方案

我猜你用窗户。我用 hack 解决了这个问题:

每次我在 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 相同。

您可能还希望每次单击启动 python文件

然后这样做:

右击 .py 文件 -> 打开方式 -> 选择 C:\bin\python.bat

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

于 2012-05-05T18:13:20.413 回答
10

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

C:\Python26\Python.exe thescript.py

或类似的。

virtualenv 所做的是它为您提供了相同 python 版本的许多单独的“虚拟”安装。这是一个完全不同的问题,因此它不会以任何方式帮助您。

于 2012-05-05T17:48:33.107 回答
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

于 2013-12-05T21:46:55.830 回答
5

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

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

有关在 windows 上的 virtualenv 中安装包的相关回答问题(而不是系统范围)我可以将 Python windows 包安装到 virtualenvs 中吗?

于 2012-05-05T17:35:13.200 回答
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
于 2012-05-05T17:41:29.620 回答
1

OP 请求有点过时了,尤其是现在 NLTK 确实有一个 py3.x 端口。请参阅使用 tar.gz 下载在 Ubuntu 13.10 上安装 nltk 3.0

这是让 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', '.']
于 2014-03-24T18:22:16.947 回答
1

这个页面有一个collections.Counter适用于 Python 2.6 的实现:

于 2012-05-05T17:37:24.573 回答
1

不确定这是否是您想要的,但我曾经长期忍受这个http://www.portablepython.com/

于 2012-05-05T17:38:47.433 回答
1

你应该看看virtualenv。我是从这篇博客文章中了解到的,其中讨论了pipfabric,也是对 Python 开发人员非常有用的工具。

于 2012-05-05T17:35:41.867 回答
0

我确实在我的机器(Windows)上使用了至少 3 或 4 个版本的 Python。来自http://python.org/的安装程序自动将它们放置在:

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

c:\Python24

在一台机器上。我主要使用 Python 2.7,因为一些应用程序使用 wxPython 以及旧的控制台代码。这python.exe没有重命名。顺便说一句,Python 2.7 还支持collections.Counter.

和不包含在我的 PATH 中c:\Python26c:\Python24c:\Python32\中,exe 被重命名为 py.exe。这样,python some.py启动 Python 2.7,并py another.py启动 Python 3.2。

于 2012-05-05T20:39:28.767 回答
0

看看WinPython,一个很好的可移植/可安装 Windows 的 Python 发行版。

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

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

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

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

python_3_64bit_shortcut your_program.py
于 2014-04-01T17:16:59.897 回答
0

如果你说的是shell,比如在linux中,如果你安装了python 3,你可以用python3命令单独调用它。Python 2 只是使用python.

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

我意识到这个问题已经将近一年了,但是 NLTK 已被移植到 Python 3(或者至少在撰写本文时是这样)。

于 2014-03-28T15:26:43.973 回答
0

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

我的老舍邦:

#!/usr/bin/env python

停止工作,因为 /usr/bin/python 是 /usr/bin/python2.6 的链接。最终解决这个问题并在 Windows、Linux 和 OSX 上工作的方法是将 shebang 更改为:

#!/usr/bin/env python2.7

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

于 2013-05-21T15:12:08.917 回答
0

最简单的解决方案:重命名路径所在位置的文件,例如: 在此处输入图像描述

于 2018-08-19T22:26:31.493 回答
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
于 2018-06-29T15:22:38.093 回答