如何从虚拟环境中启动Python Idle (virtualenv)
我有一个在虚拟环境中安装的包。如果我直接启动Python解释器,这个包可以正常导入。但是,如果我启动Idle,这个包就无法导入了,因为它只在特定的虚拟环境中可用,而不是全局可用。我该如何从虚拟环境中启动Idle,这样虚拟环境中的所有包都能使用呢?
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()
简短回答
- 启动虚拟环境
- 运行
python -m idlelib.idle
来自 这个回答。
详细回答
这个回答假设你使用的是 Python 3。
有几种不同的虚拟环境管理工具,它们在处理 Python 安装位置和运行方式上稍有不同,详细信息可以参考这个回答。
这个回答假设你使用的是 venv
模块,并且它是 按照文档安装的。
注意:某些 Linux 发行版将 venv 模块打包成单独的包:Ubuntu 和 Debian
如果虚拟环境是在名为 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.bat
或 Activate.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
对于 csh
和 fish
,有特定于 shell 的脚本用于激活虚拟环境(分别是 activate.csh
和 activate.fish
),可以像 activate
脚本一样运行。
一旦在所有操作系统上激活了虚拟环境,运行以下命令将启动 IDLE,并可以访问安装在虚拟环境中的包:
python -m idlelib.idle
对于Python 3.6及以上版本,请查看Paul Wicking下面的回答。
在Python 3.6之前,IDLE基本上是
from idlelib.PyShell import main
if __name__ == '__main__':
main()
所以你可以自己启动它,除非你在创建虚拟环境时没有选择默认的包。