Virtualenv没有创造环境

时间:2012-06-29 15:56:43

标签: python virtualenv virtualbox symlink shared-directory

我在Ubuntu 12.04上安装了Virtualenv,并使用它来处理统一桌面下的示例项目。我正在使用VirtualBox,并且在Unity桌面上遇到了一些问题,因此改为KDE桌面。

我现在正在尝试创建一个新项目,但virtualenv不允许我在我的项目文件夹中创建一个新环境。在终端我导航到项目文件夹,键入virtualenv venv并获取以下错误消息:

Traceback (most recent call last):
  File "/usr/bin/virtualenv", line 3, in <module>
    virtualenv.main()
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 938, in main
    never_download=options.never_download)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 1039, in create_environment
    site_packages=site_packages, clear=clear))
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 1215, in install_python
    copyfile(stdinc_dir, inc_dir)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 430, in copyfile
    copyfileordir(src, dest)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 405, in copyfileordir
    shutil.copytree(src, dest, True)
  File "/usr/lib/python2.7/shutil.py", line 206, in copytree
    raise Error, errors
shutil.Error: [('/usr/include/python2.7/numpy', 'venv/include/python2.7/numpy', '[Errno 30] Read-only file system')]

任何人都可以帮我解决这个问题吗?我已经尝试重新安装virtualenv但没有快乐。感谢

4 个答案:

答案 0 :(得分:14)

Virtualenv正在使用符号链接(shutil.copytree使用它们,请参阅traceback)。禁用在VirtualBox共享文件夹中创建符号链接。在终端(客户机内)进行简单测试:

$ ln -s testfile

您要么获得failed to create symbolic link './testfile': Read-only file systemProtocol error

您可以通过在主机(solution from schisamo)上的终端中执行来启用共享文件夹中的符号链接:

$ vboxmanage setextradata VM_NAME "VBoxInternal2/SharedFoldersEnableSymlinksCreate/NAME_OF_YOUR_SHARED_FOLDER" 1

将VM_NAME替换为虚拟机的名称,如VirtualBox Manager中所示:

VM_NAME example

和NAME_OF_YOUR_SHARED_FOLDER,您可以在虚拟机的设置中看到共享文件夹的名称:

Shared folders settings

设置完成后,重新启动VirtualBox。

您可以使用

检查设置(主机上的
$ vboxmanage getextradata VM_NAME enumerate

Fix for Windows (Ahti Kitsik)(感谢Bryan's answer)。


VirtualBox为共享文件夹since version 4.0 (for Linux and Solaris)实现了符号链接,但出于安全原因,它们是disabled since version 4.1.8。这可能就是为什么它首先为你服务而后来没有工作的原因。

Documentation

  

VirtualBox共享文件夹也支持符号链接   在以下条件下称为符号链接:

     
      
  • 主机操作系统必须支持符号链接。例如,需要Mac OS X,Linux或Oracle Solaris主机。
  •   
  • 目前只有Linux和Oracle Solaris Guest Additions支持符号链接。
  •   
  • 出于安全原因,默认情况下不允许来宾操作系统创建符号链接。如果您信任来宾操作系统不滥用该功能,您可以为共享文件夹创建符号链接,如下所示[见上文]
  •   

答案 1 :(得分:11)

好了,经过一番深入的谷歌搜索后发现这是一个VirtualBox问题,而不是Ubuntu问题。共享文件夹受此活动保护。我不知道它是如何/为什么它第一次工作,但它是一个已知的错误。我在共享文件夹之外创建了一个没有问题的项目。感谢Dougal的输入。

答案 2 :(得分:9)

Ahti Kitsik在他的博客上发布了一个解决方法: https://ahtik.com/fixing-your-virtualbox-shared-folder-symlink-error/

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

YOURSHAREFOLDERNAME是根据VirtualBox的共享文件夹的名称。

如果你碰巧使用的是Vagrant,这里是你的Vagrantfile的修复:

config.vm.provider :virtualbox do |vb|
  vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate//vagrant","1"]
end

答案 3 :(得分:3)

我在使用Ubuntu来宾时遇到了与virtualenv和VirtualBox(通过Vagrant管理)完全相同的错误。

记住上一次事件,其中文件权限导致我出现问题我尝试在我的Vagrantfile中启用nfs共享:

config.vm.share_folder("v-root", "/home/vagrant/apps", "/home/gareth/Projects/project-name/", :nfs => true)

这解决了我的问题。尽管如此,在VirtualBox上获取nfs共享的过程更为复杂:

https://www.virtualbox.org/wiki/Sharing_files_on_OSE