来自Powershell的Python 2和3
我使用Anaconda安装了来自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
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