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

Kev*_*nle 43 python virtualenv python-idle

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

Mat*_*son 52

简短的回答

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

这个答案.

答案很长

这个答案假定Python 3.

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

这个答案假设使用了venv模块,并且它是按照文档安装的.

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

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

my_project_dir
      ?
      ?? my_project-venv
Run Code Online (Sandbox Code Playgroud)

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

my_project-venv
      ?
      ?? Include
      ?? Lib
      ?? Scripts
      ?     ?? ...
      ?     ?? activate.bat
      ?     ?? Activate.ps1
      ?     ?? deactivate.bat
      ?     ?? ...
      ?
      ?? pyvenv.cfg
Run Code Online (Sandbox Code Playgroud)

可以通过运行my_project-venvactivate.bat脚本来启动虚拟环境,具体取决于是否Activate.ps1使用PowerShell:

:: Using cmd.exe
cd my_project_dir
.\my_project-venv\Scripts\activate.bat
Run Code Online (Sandbox Code Playgroud)

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

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

# Using PowerShell
cd my_project_dir
.\my_project-venv\Scripts\Activate.ps1
Run Code Online (Sandbox Code Playgroud)

然后,从除cmd以外的任何外壳,通过以下方式激活环境:

my_project-venv
      ?
      ?? bin
      ?     ?? ...
      ?     ?? activate
      ?     ?? activate.csh
      ?     ?? activate.fish
      ?     ?? ...
      ?
      ?? include
      ?? lib
      ?? lib64
      ?? pyvenv.cfg
Run Code Online (Sandbox Code Playgroud)

对于cshcsh存在用于激活虚拟环境(fishactivate.csh分别)的特定于shell的脚本,它们可以像activate.fish脚本一样运行.

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

# Most operating systems
cd my_project_dir
. my_project-venv/bin/activate
Run Code Online (Sandbox Code Playgroud)

  • 专业提示:使用 `alias idle='python -m idlelib.idle'` 将其设置为别名您也可以通过设置 DOSKEY 在 Windows 上执行此操作:/sf/answers/1472857781/ (2认同)
  • 为什么最后有“.idle”?我简单地通过:“python -midlelib”开始。 (2认同)
  • @Gathide 好问题。到目前为止,我唯一的原因是[原始来源](/sf/answers/615445771/)有它。查看[模块的源代码](https://github.com/python/cpython/blob/bcccf1fb63870c1b7f8abe246e27b7fff343abd7/Lib/idlelib/idle.py),“.idle”运行一些在开发 IDLE 时有用的额外代码。我觉得没有什么坏处吧?‍♂️ (2认同)

900*_*000 36

IDLE本质上是

from idlelib.PyShell import main
if __name__ == '__main__':
  main()
Run Code Online (Sandbox Code Playgroud)

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

  • 确实,`python -m idlelib` (15认同)
  • 在一个活跃的virtualenv中你可以从idlelib.PyShell import main输入`python -c"; main()"`这样可以避免你在某个地方保存脚本. (6认同)

Pio*_*ost 9

在Windows上,从这样的命令行运行的Python脚本some_script.py可能由使用python some_script.py命令时使用的其他Python解释器运行(它取决于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
Run Code Online (Sandbox Code Playgroud)


Pau*_*ing 9

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()
Run Code Online (Sandbox Code Playgroud)


ars*_*sho 6

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

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

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

#Activate the virtualenv venv
source venv/bin/activate

#To Run IDLE in virtualenv venv
python -m idlelib
Run Code Online (Sandbox Code Playgroud)

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