机器之间共享的 venv 如何使用完全相同的解释器?

How can a venv shared between machines use the exact same interpreter?

我有一个目录,可从同一网络上的多台 Linux 机器访问(准确的术语是“已安装的网络驱动器”上的目录,对吧?),其中我有一个 python 虚拟环境,用 python3 -m venv venv.

制作

我试过用这个检查一些机器的 python 版本:

$ . venv/bin/activate
$ python --version

而且我根据它是什么机器取回了不同的版本。有些显示 3.8.5,有些显示 3.8.10。我相信我已经弄明白这是因为 venv 中的“解释器”实际上是 /usr/bin 中解释器的 link,它是特定于机器的:

$ ls -lah ./venv/bin/ | grep python
lrwxrwxrwx  1 echols14 cs236ta    7 Sep 29 02:08 python -> python3
lrwxrwxrwx  1 echols14 cs236ta   16 Sep 29 02:08 python3 -> /usr/bin/python3

当我查看 /usr/bin 的内容时,似乎与 python 相关的内容不仅仅是单个解释器文件 python3.8:

$ ls -lah /usr/bin | grep python
-rwxr-xr-x  1 root   root    2.3K Jun 20  2017 dh_python3-ply
lrwxrwxrwx  1 root   root      23 Sep 28 16:10 pdb3.8 -> ../lib/python3.8/pdb.py
lrwxrwxrwx  1 root   root      31 Mar 13  2020 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx  1 root   root       9 Mar 13  2020 python3 -> python3.8
-rwxr-xr-x  1 root   root    5.3M Sep 28 16:10 python3.8
lrwxrwxrwx  1 root   root      33 Sep 28 16:10 python3.8-config -> x86_64-linux-gnu-python3.8-config
lrwxrwxrwx  1 root   root      16 Mar 13  2020 python3-config -> python3.8-config
-rwxr-xr-x  1 root   root     364 Dec 17  2019 python3-qr
-rwxr-xr-x  1 root   root    3.2K Sep 28 16:10 x86_64-linux-gnu-python3.8-config
lrwxrwxrwx  1 root   root      33 Mar 13  2020 x86_64-linux-gnu-python3-config -> x86_64-linux-gnu-python3.8-config

我希望 venv 使用相同的python 版本,无论它是从哪台机器使用的。这可能吗?

我的第一个想法是从一台机器的 /usr/bin 复制 python3.8 文件并将其放入 venv 的 bin 中,然后调整 links 以便它是那个在激活 venv 时使用。我是否需要从 /usr/bin 复制其他 python 相关文件才能运行?这种方法安全吗,还是出于某种原因应该避免使用?

如果该方法不是一个好主意,还有什么其他方法可以使共享 venv 始终使用相同版本的 python,而不管机器是什么?

注意:我在所有相关机器上都没有 root/sudo 权限,但我在其中一台机器上有 root/sudo 权限。

找到了。创建虚拟环境时,使用--copies选项:

--copies Try to use copies rather than symlinks, even when symlinks are the default for the platform

documentation

看起来像这样:

python3 -m venv --copies venv

结果如下:

$ ls -lah venv/bin/ | grep python
-rwxr-xr-x  1 echols14 cs236ta 5.3M Oct  7 18:26 python
-rwxr-xr-x  1 echols14 cs236ta 5.3M Oct  7 18:26 python3