强制 venv 将 python 的符号链接放在 macOS 和 Windows 上的相同位置

Posted

技术标签:

【中文标题】强制 venv 将 python 的符号链接放在 macOS 和 Windows 上的相同位置【英文标题】:Force venv to put python's symlink in identical locations on macOS and Windows 【发布时间】:2020-09-10 05:19:42 【问题描述】:

我正在 Python 虚拟环境中开发一个程序。运行命令

python -m venv .venv

在 Windows 上,将 python 符号链接放入 .venv\Scripts\

python3 -m venv .venv

在 macOS 上将符号链接放在 .venv/bin/ 上。我正在使用 Visual Studio Code 进行开发,并且有一个 .vscode\\settings.json 需要指向可执行文件的符号链接。例如


    "python.pythonPath": ".venv\\path\\to\\python",

如何强制venv 将符号链接放在相同的位置,而不管平台如何?

PS1..venv 文件夹被 git 忽略并包含在 .gitignore 文件中,因为 AFIK 将其与代码库一起发布并不是一个好习惯。

P.S.2. 为避免 XY 问题,最终目标是在不同平台上拥有相同的开发环境。无论解决方案如何,无论包管理器如何,Visual Studio Code 都应该能够在不同平台上找到可执行文件的符号链接。

P.S.3.我需要想办法改变__VENV_BIN_NAME__参数。

P.S.4.来自here,一种可能的解决方案可能是改用"python.pythonPath": "$env:PYTHON_INSTALL_LOC",

P.S.5.我问了另一个问题here。

【问题讨论】:

我建议您在将 .vscode/settings.json 添加到源代码管理之前阅读此问题的所有答案和 cmets - ***.com/questions/32964920/… 【参考方案1】:

两件事。一、你不能让虚拟环境在 Windows 上使用bin/(参见rejected idea)。

第二,Python 扩展正在运行一个实验来摆脱python.pythonPath,这将解决您的冲突。有关详细信息以及如何选择加入,请参阅May release blog post。

【讨论】:

在 Windows 上,vscode 自动检测 python 可执行文件,但不检测 pylint 等其他可执行文件...在 macOS 上,我必须在 'settings.json' 中明确指定位置。【参考方案2】:

为什么每个操作系统将 venv python 放在哪里很重要?如果您正确地确保 .venv 不在代码库中,但确保它在 .gitignore 中,那么加载您的代码的人是否甚至需要 venv 都没关系。这是一种很好的做法,可以保证无论谁在他们的 python 的任何操作系统上拥有你的代码,以及你的程序需要的任何依赖项,都会被使用。

如果您使用多个操作系统进行开发,请创建一个工作区或项目 .vscode 设置文件,其中包含您要使用的 python 的特定设置,但还要确保项目中的 .vscode 目录位于您的 .gitignore 中。然后在不同的机器上为这些特定于操作系统的设置设置单独的 .vscode 设置。

【讨论】:

以上是关于强制 venv 将 python 的符号链接放在 macOS 和 Windows 上的相同位置的主要内容,如果未能解决你的问题,请参考以下文章

将符号强制到 ELF 文件的顶部

在Python中创建可执行的符号链接?

如何通过覆盖现有符号链接来强制创建符号链接?

如何将符号链接视为Mercurial中的目录?

python venv下安装mysql出错 解决方法

强制 PHP 作曲家创建本地存储库的相对而非绝对符号链接