用于Windows和Linux的Python虚拟环境Shebang

用于Windows和Linux的Python虚拟环境Shebang,python,msys,shebang,python-venv,Python,Msys,Shebang,Python Venv,我有一个python文件,我想使用虚拟环境(venv)在与该文件相同的目录中执行该文件。我希望它使用这个venv,不管用户是否激活了它,以避免在没有适当环境的情况下意外运行它。我希望它能在Linux和Windows上运行(通过Git Bash) 问题是,在Linux上,venv将python放在“bin”目录下,但在Windows上,它放在“Scripts”目录下,我似乎找不到在创建python时改变这种行为的方法。我试着用GitBash创建它,希望它能“欺骗”python使用bin目录而不是脚

我有一个python文件,我想使用虚拟环境(venv)在与该文件相同的目录中执行该文件。我希望它使用这个venv,不管用户是否激活了它,以避免在没有适当环境的情况下意外运行它。我希望它能在Linux和Windows上运行(通过Git Bash)

问题是,在Linux上,venv将python放在“bin”目录下,但在Windows上,它放在“Scripts”目录下,我似乎找不到在创建python时改变这种行为的方法。我试着用GitBash创建它,希望它能“欺骗”python使用bin目录而不是脚本,但这不起作用

以下shebang在Linux上运行良好:

#!.venv3/bin/python
这一款在Windows上运行良好:

#!.venv3/Scripts/python

但是什么对两者都有效呢?我知道一个选项是创建一个shell脚本,根据检测到的操作系统激活环境(使用$OSTYPE),但我希望尽可能避免这种情况,因为这不是必需的。

您可以使用Windows版本的shebang:

#!.venv3/Scripts/python
然后在Linux端创建一个符号链接:

.venv3/Scripts -> .venv3/bin

我刚刚用我的一个虚拟环境尝试了这个。这对我很管用。我没有测试Windows案例,但当然,这必须起作用,因为我们正在为Windows使用正确的shebang。我不知道Windows,所以我不知道这是否适用于Windows方面。如果双方都支持符号链接,则可以创建指向两个系统上位于公共路径上的每个Python二进制文件的链接。如果你不能使用sym链接,那么我能想到的唯一其他解决方案就是一个可以放在公共位置的脚本。这对你有帮助吗?我只是回去检查我贴出的答案,看看我是否能帮上更多的忙,或者我是否能找出为什么我的答案没有被提问者接受或投票。