如何从虚拟环境启动python Idle(virtualenv)

问题描述 投票:38回答:8

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

python virtualenv python-idle
8个回答
36
投票

IDLE本质上是

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

因此,除非您构建没有默认包的virtualenv,否则您可以自己启动它。


47
投票

Short answer

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

来自this answer

Long answer

这个答案假定Python 3。

有几个不同的虚拟环境管理器,每个管理器在安装python及其运行方式(as detailed in this answer)的处理方式略有不同。

这个答案假定使用了venv模块,并且它是installed following the 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 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 venv idlelib.idle

9
投票

在Windows上,从命令行运行的Python脚本(如some_script.py)可能由使用python some_script.py命令时使用的其他Python解释器运行(它取决于py文件关联)。如果想要避免这个问题,最好创建一个内容为idle.bat的批处理文件python -c "from idlelib.PyShell import main; main()",并将其放在virtualenv中的Scripts文件夹中。此外,像其他人注意到空闲需要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

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

2
投票

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


2
投票

Python 3.6 modernized and refactored 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()

1
投票

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

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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.