来自Powershell的Python 2和3

来自Powershell的Python 2和3,python,python-2.7,powershell,python-3.x,anaconda,Python,Python 2.7,Powershell,Python 3.x,Anaconda,我使用Anaconda安装了python3.5,并使用以下命令安装了2.7: conda create -n py27 python=2.7 anaconda 这已成功地将2.7作为一个单独的环境安装到Anaconda3文件夹中: # original installation path for 3.5 C:\Users\username\AppData\Local\Continuum\Anaconda3 # path for 2.7 after conda create -n is run

我使用Anaconda安装了
python3.5
,并使用以下命令安装了
2.7

conda create -n py27 python=2.7 anaconda
这已成功地将
2.7
作为一个单独的环境安装到Anaconda3文件夹中:

# original installation path for 3.5
C:\Users\username\AppData\Local\Continuum\Anaconda3

# path for 2.7 after conda create -n is run
C:\Users\username\AppData\Local\Continuum\Anaconda3\envs\py27
只要我使用像Spyder或IPython笔记本这样的IDE,就可以很好地工作,在这里我可以选择哪个Python版本。但是,我无法在PowerShell中使用
py27
python2.7
)。我试过使用:

activate py27
但是
python
命令仍然会触发
3.5
,并且
py27
会导致此错误:

py27 : The term 'py27' is not recognized as the name of a cmdlet, function, script file, or operable program. 
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1 + py27
    + ~~~~ 
    + CategoryInfo   : ObjectNotFound: (py27:String) [], CommandNotFoundException
     + FullyQualifiedErrorId : CommandNotFoundException
我已经尝试了所有我知道的或者读过的东西,但是没有任何东西能够解决这个问题。我不确定这是否有帮助,但这是我的PATH变量供参考:

C:\Users\username\AppData\Local\Continuum\Anaconda3;C:\Users\username\AppData\Local\Continuum\Anaconda3\Scripts;C:\Users\username\AppData\Local\Continuum\Anaconda3\Library\bin;%SystemRoot%\system32\WindowsPowerShell\v1.0\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;[stuff in between];C:\Users\username\AppData\Local\Continuum\Anaconda3\envs\p27;C:\Users\username\AppData\Local\Continuum\Anaconda3\envs\p27\Scripts\;C:\Users\username\AppData\Local\Continuum\Anaconda3\envs\p27\Library\bin

从PATH变量可以看出,您创建了名为“p27”的py27环境 尝试“激活p27”
您可以通过查找conda安装文件夹中的“envs”目录来反复检查env名称。

我决定用以下解决方案来结束这个问题:使用
Cmd.exe
或使用
PowerShell
和Bill Stewart的
调用CmdScript
(请参阅注释)。首先,使用
命令提示符(Cmd.exe)
的简单解决方案:

它激活了我使用
conda
创建的Python 2.7环境。现在,对于
Powershell
版本。首先,执行此操作并下载
Environment.ps1
脚本。对我来说,它是作为文本文件下载的,所以我打开了文件,删除了
.txt
扩展名,并将其替换为
.ps1
。假设我将
Environment.ps1
保存在以下目录
C:\Users\user\u name\AppData\Local\invoke\u cmdscript
中。获取此路径并将其添加到环境变量表单中的path用户变量中。现在,要在
PowerShell
窗口中键入的命令如下:

# dot-source my file
. Environment.ps1

# activate 2.7 environment (if not in the directory of activate.bat, specify full path)
Invoke-CmdScript .\activate.bat py2


# deactivate 2.7 environment (same note about current directory and full paths)
Invoke-CmdScript .\deactivate.bat    

如果希望每次键入python3时都运行python3,并且 要在每次键入python2时运行python2,请执行以下操作:

根据可执行文件的位置,只需制作一些别名即可 使用以下代码:

对于python2:

设置别名python2 C:\Users\yourusername\python2location\python.exe

对于python3:

设置别名python3 C:\Users\yourusername\python3location\python.exe


要了解如何使其永久化,请查看我在

上的回复。如果您喜欢powershell而不是cmd,则无需更改“stuff”即可键入:

cmd #to get internally into command prompt from ps
activate envname
powershell #to get back

什么是激活?如果是批处理文件,则它设置的环境变量将不会传播到PowerShell。要解决此问题,您可以使用@Bill_Stewart的
Invoke CmdScript
函数,
activate
是我在SO上找到的命令,用于“激活”Anaconda3安装中的
2.7
环境。这是我在论坛上读到的最常见的解决方案。但是,即使命令在PowerShell中运行时没有问题,它实际上也不允许我从命令行运行
2.7
。这里又是一个示例帖子:如果
activate
是一个批处理文件(cmd.exe shell脚本),并且它设置了环境变量,则需要使用本文中的
Invoke CmdScript
函数运行它。要以不同的方式重述:PowerShell可以运行批处理文件,但是,如果批处理文件设置了在批处理文件终止后应该保持的环境变量值,则所述批处理文件将无法在PowerShell中正常工作,因为运行批处理文件的cmd.exe进程已终止。解决方法是“捕获”批处理文件所做的环境变量更改,然后将更改传播到PowerShell。这就是上述文章中调用CmdScript函数的目的。@Bill_Stewart,我将Environment.ps1目录添加到我的PATH变量中,点源于Environment.ps1文件,这使我能够访问调用CmdScript函数。此时,我运行了命令
Invoke CmdScript。\activate.bat
。我得到
。\activate.bat不被识别为内部或外部命令、可操作程序或批处理文件。
作为回报。我使用了“activate p27”无效。老实说,我不确定激活环境后应该采取什么措施。例如,要在激活后在p27中使用python版本,我是使用python、python2、p27还是py-2来运行python2.7?我都试过了,但似乎没有任何效果。
cmd #to get internally into command prompt from ps
activate envname
powershell #to get back