【问题标题】:How to launch python Idle from a virtual environment (virtualenv)如何从虚拟环境(virtualenv)启动 python Idle
【发布时间】:2011-06-22 21:12:35
【问题描述】:

我有一个从虚拟环境安装的包。如果我只是启动 python 解释器,则可以很好地导入该包。但是,如果我启动 Idle,则无法导入该包(因为它仅在一个特定的 virtualenv 中可用而不是全局的)。如何从 virtualenv 启动 Idle,以便 virtualenv 中的所有包都可用?

【问题讨论】:

    标签: python virtualenv python-idle


    【解决方案1】:

    在 Windows 上:

    C:\foo\bar\{venv_name}\activate
    python -m idlelib
    

    【讨论】:

      【解决方案2】:

      简答

      1. 启动虚拟环境
      2. 运行python -m idlelib.idle

      来自this answer

      长答案

      此答案假定 Python 3。

      有几种不同的虚拟环境管理器,每一种处理 python 的安装位置和运行方式的方式都略有不同,as detailed in this answer

      此答案假定使用了 venv 模块,并且它是 installed following the docs

      注意:一些 Linux 发行版将 venv 模块打包到一个单独的包中:UbuntuDebian

      如果虚拟环境通过在文件夹my_project 中运行python -m venv my_project-venv 安装在名为my_project-venv 的文件夹中,则虚拟环境将位于模块创建的新文件夹中:

      my_project_dir
            │
            ┝━ my_project-venv
      

      在 Windows 上,使用 Python 3.7.1,my_project-venv 文件夹中的文件可能如下所示:

      my_project-venv
            │
            ┝━ Include
            ┝━ Lib
            ┝━ Scripts
            │     ┝━ ...
            │     ┝━ activate.bat
            │     ┝━ Activate.ps1
            │     ┝━ deactivate.bat
            │     ┕━ ...
            │
            ┕━ pyvenv.cfg
      

      可以通过运行activate.batActivate.ps1 脚本来启动虚拟环境,具体取决于cmd or PowerShell is used

      :: Using cmd.exe
      cd my_project_dir
      .\my_project-venv\Scripts\activate.bat
      
      # Using PowerShell
      cd my_project_dir
      .\my_project-venv\Scripts\Activate.ps1
      

      注意:如果通过双击运行这些脚本,它们不会使 shell 保持打开状态。启动一个 shell,然后通过键入上述命令运行它们,并为您的项目更改文件夹名称

      在大多数其他操作系统上,虚拟环境文件夹如下所示:

      my_project-venv
            │
            ┝━ bin
            │     ┝━ ...
            │     ┝━ activate
            │     ┝━ activate.csh
            │     ┝━ activate.fish
            │     ┕━ ...
            │
            ┝━ include
            ┝━ lib
            ┝━ lib64
            ┕━ pyvenv.cfg
      

      然后,从 cshfish 以外的任何 shell,通过以下方式激活环境:

      # Most operating systems
      cd my_project_dir
      . my_project-venv/bin/activate
      

      对于cshfish,有用于激活虚拟环境的特定于shell 的脚本(分别为activate.cshactivate.fish),它们可以像activate 脚本一样运行。

      在所有操作系统上激活虚拟环境后,运行以下命令将启动 IDLE 并访问安装到虚拟环境中的软件包:

      python -m idlelib.idle
      

      【讨论】:

      【解决方案3】:

      对于 Python 3.6+,请参阅Paul Wicking's answer below

      在 Python 3.6 之前的版本中,IDLE 本质上是

      from idlelib.PyShell import main
      if __name__ == '__main__':
        main()
      

      所以你可以自己启动它,除非你在没有默认包的情况下构建了 virtualenv。

      【讨论】:

      • 我将从哪个文件夹运行这些脚本?谢谢
      • @Khnle:显然,在您激活 virtualenv 之后,来自项目所在的文件夹。我刚刚尝试过,它确实有效。把这个脚本放到你的 virtualenv 的 bin.
      • 在活动的 virtualenv 中,您只需键入 python -c "from idlelib.PyShell import main; main()",这样您就无需将脚本保存在某个地方。
      • 确实,python -m idlelib
      • 请参阅下面 Paul Wicking 的回答,了解适用于 Python 3.6 之前及之后版本的脚本。那个对我有用。
      【解决方案4】:

      Python 3.6 modernized and refactoredidlelib。此更改包括重命名几种方法。因此,现在必须使用idlelib.pyshell 访问idlelib.PyShell。以下 sn-p 基于公认的答案,适用于任何 Python 版本:

      #!/usr/bin/env python
      """Simple script to run Idle from a venv in PyCharm."""
      
      try:
          # Import for Python pre 3.6
          from idlelib.PyShell import main
      except ModuleNotFoundError:
          # Import for Python version 3.6 and later
          from idlelib.pyshell import main
      
      if __name__ == '__main__':
          main()
      

      【讨论】:

        【解决方案5】:

        我使用的是 Ubuntu 15.04 操作系统。我已经使用 virtualenv 安装了一些软件包。

        所以,要运行 virtualenv 中的文件,包括那些包,我在终端中使用以下命令

        (我的虚拟环境名称是 venv):

        #Activate the virtualenv venv
        source venv/bin/activate
        
        #To Run IDLE in virtualenv venv
        python -m idlelib
        

        运行IDLE后,您可以使用ctrl+o键盘快捷键打开文件。

        【讨论】:

          【解决方案6】:

          对我来说,启动这样的东西很有效(Linux 终端):

          source venv/bin/activate && python `which idle` &
          

          (venv 显然是你的 venv 的路径)

          【讨论】:

            【解决方案7】:

            将几个答案放在一起,这就是我在 Window 上使用功能齐全的批处理文件执行此操作的方法。

            在你的 virtualenv 的 Scripts 目录中创建 idle.bat。它将创建(除非它们存在)到 tcl 和 tk(编写时为 8.5 版)的链接,并将它们放在您的 virtualenv 的 Lib 目录中,然后它会启动空闲。将此代码完全复制并粘贴到编辑器中。更改当前 virtualenv 和 Python 安装的路径名(我的是 2.7 的标准),然后将其保存到 Scripts/idle.bat。

            IF EXIST C:\<path to current virtualenv>\Lib\tcl8.5 (
            REM do nothing
            ) ELSE (
                mklink /d C:\<path to current virtualenv>\Lib\tcl8.5 "c:\Python27\tcl\tcl8.5"
            )
            IF EXIST C:\<path to current virtualenv>\Lib\tk8.5 (
            REM do nothing
            ) ELSE (
                mklink /d C:\<path to current virtualenv>\Lib\tk8.5 "c:\Python27\tcl\tk8.5"
            )
            
            python -c "from idlelib.PyShell import main; main()"
            

            使用 Powershell (RUN AS ADMIN!) 运行脚本以打开空闲状态。

            cd c:\<path to current virtualenv>\
            ./Scripts/idle.bat
            

            【讨论】:

            • 谢谢!我正在寻找一个与我之前在另一台机器上制作的完全一样的脚本。
            【解决方案8】:

            在 Windows 上,像 some_script.py 这样从命令行运行的 Python 脚本可能由其他 Python 解释器运行,而不是使用 python some_script.py 命令时使用的解释器(这取决于 py 文件关联)。如果想避免这个问题,最好创建一个批处理文件idle.bat,内容为python -c "from idlelib.PyShell import main; main()",并将其放在virtualenv 的Scripts 文件夹中。此外,像其他人指出空闲需要 tcltk 文件夹才能工作。最简单的解决方案是创建从 virtualenv 到 base Python 安装的符号链接,如下所示

            (2.7) c:\python\virtualenv\2.7\Lib>mklink /d tcl8.5 "c:\Program Files\Python\2.7\tcl\tcl8.5"
            symbolic link created for tcl8.5 <<===>> c:\Program Files\Python\2.7\tcl\tcl8.5
            (2.7) c:\python\virtualenv\2.7\Lib>mklink /d tk8.5 "c:\Program Files\Python\2.7\tcl\tk8.5"
            symbolic link created for tk8.5 <<===>> c:\Program Files\Python\2.7\tcl\tk8.5
            

            【讨论】:

            • +1,谢谢。请注意:不要在 Program Files 下安装 Python,因为路径名中有空格! Virtualenv 对我来说失败了,在 C:\ (默认)下重新安装 Python 修复了它。
            • 我无法让 idle.bat 文件在我的 Python 2.7 系统上运行,即使在创建了符号文件夹链接之后也是如此。我最初在 Lib 下创建它们,idle.bat 启动失败。然后我在虚拟环境下创建了一个叫tcl的文件夹,并在那里创建了符号文件夹链接,还是产生了错误:Traceback (most recent call last): "... _tkinter.TclError: Can't find a usable init .tcl 在以下目录中: {C:\Users\AMS\my_env\tcl\tcl8.5} C:/Python27/lib/tcl8.5 C:/Users/AMS/my_env/lib/tcl8.5 ...这可能意味着 Tcl 没有正确安装。”有什么想法吗?
            • 好的,复制下面 Tim 指出的两个文件夹(而不是符号链接)解决了问题,我可以通过 idle.bat 启动 IDLE。
            【解决方案9】:

            @biomed 我在 Windows 上,我正在尝试这个。在我的 python2.6 文件夹中,我必须将 python26/tcl/tcl8.5 和 python/tcl/tk8.5 文件夹复制到 python26/Lib,然后在我的 virtualenv 的脚本文件夹中创建上面的脚本。效果很好。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-12-09
              • 1970-01-01
              • 2019-09-25
              • 2021-08-08
              相关资源
              最近更新 更多