我有一个基于django的应用程序,我从一个virtualbox-shared文件夹运行。当开始使用'runserver'时,我收到一个错误,表明找不到模块。将相同的确切代码复制到本地文件系统上的目录后,它将按预期启动并运行。
在使用virtualbox和python时,有人见过这样的话吗?
当从挂载的共享文件夹与本地文件夹运行python时,模块解析的工作方式不同,但是我找不到一个冒烟的枪,指示它是由挂载的文件夹或python引起的
谢谢!
答案 0 :(得分:0)
尽量避免将项目(大量文件/目录)放在vboxsf
(默认同步文件夹)上。
vboxsf
缺乏对符号/硬链接的支持,这可能会导致问题(例如使用git作为版本控制)。在这里查看票证#818,它仍未修复。
答案 1 :(得分:0)
您可能会遇到文件系统区分大小写的问题。我花了几个小时自己解决这个问题。共享文件夹不区分大小写,但本地文件夹区分大小写,因为它们位于不同的文件系统(ext3 / 4)上。因此,您将遇到当前目录中的python文件将覆盖同名导入的问题。
pycrypto的一个简单例子显示了这个(pip install pycrypto
,如果你没有它):
vagrant@virtualos:/mnt/shared_folder$ python -c 'from Crypto.PublicKey import RSA'
vagrant@virtualos:/mnt/shared_folder$ touch crypto.py
vagrant@virtualos:/mnt/shared_folder$ python -c 'from Crypto.PublicKey import RSA'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named PublicKey
如果我在本地(ext4)目录上做同样的事情,它可以正常工作。似乎python具有不同的导入逻辑,具体取决于它运行的操作系统。
不幸的是,除了手动将文件复制到我的VM而不是使用共享文件夹之外,我还没有找到一个好的解决方案。
答案 2 :(得分:0)
我发现的一个解决方案是将带有cifs的共享文件夹安装到VM中。这似乎完美无缺。我没有找到vboxsf的解决方案。