67

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

4

9 回答 9

90

简短的回答

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

这个答案

长答案

这个答案假设 Python 3。

有几个不同的虚拟环境管理器,每个管理器都有稍微不同的方式来处理 python 的安装位置和运行方式,详见这个答案

此答案假定venv使用了该模块,并且它是按照 docs 安装的

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

my_project-venv如果虚拟环境安装在从文件夹内部运行调用python -m venv my_project-venv的文件夹my_project中,则虚拟环境将位于模块创建的新文件夹中:

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使用 PowerShell

:: 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

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

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

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

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

python -m idlelib.idle
于 2016-06-29T16:05:12.477 回答
42

对于 Python 3.6+,请参阅下面 Paul Wicking 的回答

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

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

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

于 2011-02-07T18:34:38.917 回答
10

Python 3.6进行了现代化和重构 idlelib。此更改包括重命名几种方法。因此,idlelib.PyShell现在必须使用idlelib.pyshell. 以下代码段基于公认的答案,适用于任何 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()
于 2018-02-09T18:15:14.047 回答
9

在 Windows 上,像这样从命令行运行的 Python 脚本some_script.py可能由其他 Python 解释器运行,而不是使用python some_script.py命令时使用的解释器(这取决于py文件关联)。如果想避免这个问题,最好创建一个idle.bat包含内容的批处理文件python -c "from idlelib.PyShell import main; main()"并将其放在Scriptsvirtualenv 的文件夹中。此外,就像其他人指出的空闲需要tcltk文件夹一样工作。最简单的解决方案是创建从 virtualenv 到基本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
于 2012-04-28T19:50:55.057 回答
6

我使用的是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键盘快捷键打开文件。

于 2016-07-20T14:40:44.543 回答
3

将几个答案放在一起,这就是我如何使用功能齐全的批处理文件在 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
于 2014-09-10T19:31:39.450 回答
2

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

于 2011-05-05T14:28:15.110 回答
1

对我来说,启动这样的东西是可行的(Linux 终端):

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

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

于 2015-09-14T12:40:01.977 回答
1

在 Windows 上:

C:\foo\bar\{venv_name}\activate
python -m idlelib
于 2021-08-20T10:06:55.993 回答