在 Vagrant 中共享一个 venv 目录

Sharing a venv directory in Vagrant

我有一个由 vagrant 管理的 Windows 10 位来宾,并且同步了一个 python 应用程序目录:

#Vagrantfile
config.vm.synced_folder "../python_app", "/vagrant_data"

我想在 OSX 主机和 Windows 来宾中都有一个 venv,但是在来宾中尝试创建时出现错误:

Error: Unable to create directory 'C:\vagrant_data'

在来宾框中,C:\vagrant_data 包含 python_app 个文件。

并且它被符号链接到来宾中的另一个目录:

 Directory of C:\

11/18/2020  03:34 PM    <DIR>          Users
etc...
11/18/2020  03:17 PM    <SYMLINKD>     vagrant [\vboxsvr\vagrant]
11/18/2020  03:17 PM    <SYMLINKD>     vagrant_data [\vboxsvr\vagrant_data]

我可以创建一个文件:

echo hello world > vagrant_data\hello.txt

或一个目录:

mkdir vagrant_data\removeme

这些文件也出现在主机目录中。

还没有 ScriptsLib 目录。

那里 ,但是一个 pyvenv.cfg 文件,其中包含来自主机 (osx) 的详细信息:

home = /usr/local/bin
include-system-site-packages = false
version = 3.8.6

虽然我在guest里面有py --version 3.9,但是home位置明显会不一样

同步目录下exclude指定文件有好的解决办法吗?

另一种选择当然是完全不同步并使用 Git 远程将文件从 devbox 传递到测试环境。

Vagrant 的 rsync

does a one-time one-way sync from the machine running to the machine being started by Vagrant.

更有意义的是将 venv 简单地移动到同步文件夹 上方 的目录中,如下所示:

config.vm.synced_folder "../my_venv/python_app", "/my_venv/python_app"

(同步 Vagrantfile 所在文件夹旁边的文件夹,而不是在其中)

这样,只同步了第二个目录,但创建了第一个目录。所以我 vagrant ssh 进入客户机,cd 进入同步目录 上方的 目录,并在那里创建 venv