我面临着一种独特的情况,虽然有些微不足道但却很痛苦。
我需要使用Python 2.6.6,因为NLTK没有移植到Python 3(这是我可以收集的)。
在一个不同的代码中(它同时工作),有一个集合计数器函数,它只在Python 3中可用,但在Python 2.6.6中不可用。
因此,每次我在两个代码之间切换时,我需要安装&卸载版本。这是浪费时间。
有关我如何指定要使用的版本的任何建议?
答案 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
创建运行每个版本的别名。
为了成功加载您创建该链接的配置文件,您可能需要更改执行策略。
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博客文章中了解了这一点,其中讨论了pip
和fabric
,这也是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:\Python26
和c:\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)