2012-06-29 108 views
12

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

我现在试图创建一个新项目,但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,但没有喜悦。谢谢

+0

这是抱怨你正试图在只读文件系统上创建一个virtualenv。你想要做什么目录?你可以在那里触摸一个文件吗? – Dougal

+0

@Dougal它是一个vbox共享文件夹。但是,工作环境的项目也在此文件夹中。编辑:是的,我可以触摸相同文件夹中的文件。创建一个新文件没有问题 – adohertyd

+0

好吧:你可以'mkdir -p venv/include/python2.7/numpy;触摸venv/include/python2.7/numpy/test'?也许'venv'或者一个子目录是一个只读文件系统的链接? – Dougal

回答

11

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

+0

您可以禁用该保护,并且在较早的VirtualBox版本中未禁用该保护。看[我的回答](http://stackoverflow.com/a/24353494/1168315) – Dominik

3

我已经遇到了与virtualenv和VirtualBox(通过Vagrant管理)与Ubuntu guest虚拟机完全相同的错误。

记住以前的事件,其中文件的权限引起了我我试着在NFS在我Vagrantfile共享转向的问题:

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

这解决了这个问题对我来说。为获得NFS共享上的VirtualBox的过程是有点棘手,但:

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

9

阿赫蒂Kitsik发布了解决办法在他的博客: https://ahtik.com/fixing-your-virtualbox-shared-folder-symlink-error/

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1 

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

如果你碰巧使用的放浪,这里是为您Vagrantfile修复:

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

为什么//流浪汉? – julestruong

+0

“如果你碰巧在使用流浪汉”。默认的共享文件夹(或曾经是)'/ vagrant',所以这个例子展示了如何使用它。 – Bryan

+0

如果您澄清它是否需要作为客户机或主机上的文件夹,那将会很棒。尽管这样做,但手指穿过 – codewizard

12

VIRTUALENV使用符号链接(shutil.copytree使用它们,见回溯)。在VirtualBox共享文件夹中创建符号链接被禁用。在终端简单测试(客户机内):

$ ln -s testfile 

要么你会得到一个failed to create symbolic link './testfile': Read-only file systemProtocol error

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

替换VM_NAME与虚拟机的名称,如在VirtualBox的管理器看出::

可以由主机(solution from schisamo)上在终端执行使在共享文件夹的符号链接

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出于安全原因。这可能是它为什么第一次为你工作,之后又不是。

+1

什么是SHARE_NAME? – Meglio

+0

@Meglio它是VirtualBox设置中共享文件夹的名称。在我的回答中将其更改为“NAME_OF_YOUR_SHARED_FOLDER”。 – Dominik

+0

仍然不清楚 - 哪些设置,例如如果我使用流浪汉?它是客户端os还是主机os看到的名称?它只是名字还是全路径?请你解释一下。 – Meglio