在 Windows 中调用 python 脚本时自动打开虚拟环境

Automatically open a virtual environment when calling a python script in Windows

这个问题以前有人问过,但答案都是几年前的,我找不到任何适合我的,所以我很感激你的帮助。

问题很简单,真的:我有一个 python 脚本和一个虚拟环境,当我双击它或从另一个程序调用它时,我希望它进入 运行 。我怎样才能做到这一点?

您必须将包目录地址添加到您的 sys.path

sys.path sys 模块中的内置变量。它包含解释器将在其中搜索所需模块的目录列表。

将下面的行添加到脚本的顶部,现在您可以双击脚本文件并且一切正常

import sys; sys.path.append("./<environment path>/Lib/site-packages")

然而,这是一个简单的解决方案,正如 sinoroc 所说,这不是一个好的解决方案,因为在这种情况下,您使用的是系统解释器而不是虚拟环境解释器,所以如果事情没有按预期工作,我不会感到惊讶.


您也可以下载所有需要的包并将它们解压缩到单个文件夹中,然后将该文件夹添加到 sys.path

首先使用下面的命令下载你需要的包

pip download <package names> --dest <directory name>

例如:

pip download requests --dest packages

最后添加文件夹包含你的包到你的路径

import sys; sys.path.append("./<packages directory>")

推荐的解决方案

最好的解决方案是为 windows 编写小的批处理脚本或为 linux 编写 shell 脚本,自动激活虚拟环境,然后 运行 你的脚本

首先为 windows 创建扩展名为 .bat 或为 linux 创建扩展名为 .sh 的文件,然后在下面添加行

用于 .bat 文件

<environment path>\Scripts\activate && python <script name>.py

对于.sh 文件

source <environment path>/bin/activate && python <script name>.py

现在您可以单击此批处理脚本 *.bat 文件或 shell 脚本 *.sh 文件和所有内容工作正常

一些想法

社邦

放置一个 shebang 指向虚拟环境中的 Python 解释器,完整路径位于脚本顶部。

#!/path/to/my/venv/bin/python

import sys

print(sys.executable)

Shell/batch 脚本

编写一个 shell 脚本,将调用封装到实际的 Python 脚本中:

#!/usr/bin/env sh

/path/to/my/venv/bin/python /path/to/my/script.py

Python包装器

#!/usr/bin/env python3

import subprocess

command = [
    '/path/to/my/venv/bin/python',
    '/path/to/my/script.py',
]
subprocesss.check_call(command)