【问题标题】:Python 2 and 3 from Powershell来自 Powershell 的 Python 2 和 3
【发布时间】:2016-07-04 07:14:26
【问题描述】:

我使用 Anaconda 安装了 Python 3.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 Notebook 这样的 IDE,我可以在其中选择哪个 Python 版本,这很有效。但是,我无法在 PowerShell 中使用 py27 (Python 2.7)。我试过使用:

activate py27

然而python 命令仍会触发3.5py27 会导致此错误:

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

【问题讨论】:

  • 什么是activate?如果是批处理文件,它设置的环境变量不会传播到 PowerShell。要解决此问题,您可以使用 this article 中的 Invoke-CmdScript 函数。
  • @Bill_Stewart, activate 是我在 SO 上找到的命令,用于在 Anaconda3 安装中“激活”2.7 环境。这是我在论坛上看到的最常见的解决方案。然而,即使命令在 PowerShell 中运行没有问题,它实际上也不允许我从命令行运行 2.7。这是一个示例帖子here
  • 再次重申:如果activate 是一个批处理文件(cmd.exe shell 脚本)并且它设置了环境变量,您将需要使用文章中的Invoke-CmdScript 函数来运行它。
  • 以不同的方式概括:PowerShell可以运行批处理文件,但是如果批处理文件设置了应该在批处理文件终止后保留的环境变量值,则所述批处理文件将无法在PowerShell中正常工作,因为运行批处理文件的 cmd.exe 进程终止。解决方法是“捕获”批处理文件所做的环境变量更改,然后将更改传播到 PowerShell。这就是上述文章中Invoke-CmdScript 函数的用途。
  • @Bill_Stewart,我将 Environment.ps1 目录添加到我的 PATH 变量中,对 Environment.ps1 文件进行点源,这使我可以访问 Invoke-CmdScript 函数。此时,我运行了命令Invoke-CmdScript .\activate.bat。我得到'.\activate.bat' is not recognized as an internal or external command, operable program or batch file. 作为回报。

标签: python python-2.7 powershell python-3.x anaconda


【解决方案1】:

我决定用以下解决方案结束这个问题:使用Cmd.exe 或将PowerShell 与Bill Stewart 的Invoke-CmdScript 一起使用(参见cmets)。首先,使用Command Prompt (Cmd.exe)的更简单的解决方案:

# to activate
C:\Users\me\> activate py2

# to deactivate and return to Python 3.5
C:\Users\me\> deactivate

这会激活我使用 conda 创建的 Python 2.7 环境。现在,对于Powershell 版本。首先,去这个site 并下载Environment.ps1 脚本。对我来说,它是作为文本文件下载的,所以我打开了文件,删除了 .txt 扩展名并将其替换为 .ps1。所以,假设我将Environment.ps1 保存在以下目录C:\Users\user_name\AppData\Local\invoke_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    

【讨论】:

    【解决方案2】:

    如果您希望每次键入 python3 时都运行 python 3,并且 每次键入 python2 时都会运行 python 2:

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

    对于python2:

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

    对于python3:

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

    要了解如何使它们永久化,请查看我在 following page 的回复

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我使用了 'activate p27' 无济于事。老实说,我不确定激活环境后应该采取哪些步骤。比如激活后要使用p27中的python版本,我是用python、python2、p27还是py -2运行python 2.7?我已经尝试了所有方法,但似乎没有任何效果。
      【解决方案4】:

      如果您喜欢 powershell 而不是 cmd 而不处理更改“东西”,则一种解决方法是键入:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-22
        • 1970-01-01
        • 1970-01-01
        • 2016-07-03
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多