我面临着一个独特的情况,有点微不足道但很痛苦。
我需要使用 Python 2.6.6,因为 NLTK 没有移植到 Python 3(这是我可以收集的)。
在不同的代码(同时工作)中,有一个集合计数器函数,它仅在 Python 3 中可用,但在 Python 2.6.6 中不可用。
所以,每次我在两个代码之间切换时,我都需要安装和卸载版本。这太浪费时间了。
关于如何指定要使用的版本有什么建议吗?
我面临着一个独特的情况,有点微不足道但很痛苦。
我需要使用 Python 2.6.6,因为 NLTK 没有移植到 Python 3(这是我可以收集的)。
在不同的代码(同时工作)中,有一个集合计数器函数,它仅在 Python 3 中可用,但在 Python 2.6.6 中不可用。
所以,每次我在两个代码之间切换时,我都需要安装和卸载版本。这太浪费时间了。
关于如何指定要使用的版本有什么建议吗?
安装 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
如果您遇到问题,请联系我或发表评论。
您只需在不同的目录中安装多个版本,然后使用您要使用的 Python 版本运行 Python 程序。像这样:
C:\Python26\Python.exe thescript.py
或类似的。
virtualenv 所做的是它为您提供了相同 python 版本的许多单独的“虚拟”安装。这是一个完全不同的问题,因此它不会以任何方式帮助您。
对于那些使用 Windows 的人,如果您不反对使用 PowerShell,则可以按照其他答案中的说明分别安装 python 2 和 3。然后你可以这样做:
Set-Alias python27 [some path]\python27\python.exe
Set-Alias python33 [some path]\python33\python.exe
为运行每个版本创建一个别名。
为了成功加载该链接将让您创建的配置文件,您可能需要更改执行策略。
Set-ExecutionPolicy RemoteSigned
应该可以解决问题,但如果您想了解更多关于执行策略的信息,您可能需要点击此链接:https ://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about /about_execution_policies
使用 virtualenv,它允许您创建动态 python 环境。在这里查看 python 的页面。
http://pypi.python.org/pypi/virtualenv
有关在 windows 上的 virtualenv 中安装包的相关回答问题(而不是系统范围)我可以将 Python windows 包安装到 virtualenvs 中吗?
使用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
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', '.']
这个页面有一个collections.Counter
适用于 Python 2.6 的实现:
不确定这是否是您想要的,但我曾经长期忍受这个http://www.portablepython.com/
你应该看看virtualenv。我是从这篇博客文章中了解到的,其中讨论了pip
和fabric
,也是对 Python 开发人员非常有用的工具。
我确实在我的机器(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:\Python26
。c:\Python24
在c:\Python32\
中,exe 被重命名为 py.exe。这样,python some.py
启动 Python 2.7,并py another.py
启动 Python 3.2。
看看WinPython,一个很好的可移植/可安装 Windows 的 Python 发行版。
便携:预配置,它应该在 Windows 下的任何机器上开箱即用(没有任何要求),并且包含 WinPython 的文件夹可以移动到具有大多数应用程序设置的任何位置(本地、网络或可移动驱动器)
灵活:可以根据需要安装(或者我应该写“使用”,因为它是可移植的)尽可能多的 WinPython 版本(如隔离和自洽环境),即使这些版本运行不同版本的 Python(2.7、3.3)或不同版本同一台机器上的架构(32 位或 64 位)
它还允许您轻松地将给定的 python 版本注册和取消注册为系统默认版本。
但即使是可移植的,您也可以创建 python 可执行文件的快捷方式并将其放在路径中的某个位置。只需将不同版本的快捷方式命名为不同的名称。然后你可以使用:
python_3_64bit_shortcut your_program.py
如果你说的是shell,比如在linux中,如果你安装了python 3,你可以用python3
命令单独调用它。Python 2 只是使用python
.
至少这是我使用类似 Ubuntu 的系统的经验,我没有使用过其他 Linux 环境。
我意识到这个问题已经将近一年了,但是 NLTK 已被移植到 Python 3(或者至少在撰写本文时是这样)。
您可以在 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
我相信它应该适用于任何版本。
您可以使用 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