2012-06-29 18 views
12

Instalé Virtualenv en Ubuntu 12.04 y lo estaba usando para trabajar en un proyecto de muestra en el escritorio de la unidad. Estoy usando VirtualBox y estaba teniendo algunos problemas con el escritorio de la unidad así que cambié al escritorio de KDE.Virtualenv no creando un entorno

Ahora estoy tratando de crear un nuevo proyecto pero el virtualenv no me permitirá crear un nuevo entorno en la carpeta de mi proyecto. En la terminal de Navegación a la carpeta del proyecto, escriba virtualenv Venv y obtener los siguientes mensajes de error:

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')] 

Puede alguien ayudarme a resolver esto? He intentado reinstalar Virtualenv pero no hay alegría. Gracias

+0

Se queja de que está tratando de crear un virtualenv en un sistema de archivos de solo lectura. ¿En qué directorio estás tratando de ingresar? ¿Puedes 'tocar' un archivo allí? – Dougal

+0

@Dougal Es una carpeta compartida de vbox. El proyecto con el entorno de trabajo también está en esta carpeta. editar: Sí, puedo tocar un archivo en la misma carpeta. Creado un nuevo archivo sin problemas – adohertyd

+0

Bien: puede 'mkdir -p venv/include/python2.7/numpy; toque venv/include/python2.7/numpy/test'? ¿Tal vez 'venv' o un subdirector es un enlace a un sistema de archivos de solo lectura? – Dougal

Respuesta

11

Bien, después de un poco más de profundidad en Google descubrió que este es un problema de VirtualBox, no es un problema de Ubuntu. Las carpetas compartidas están protegidas de esta actividad. No sé cómo/por qué funcionó la primera vez, pero es un error conocido. Creé un proyecto fuera de la carpeta compartida sin problemas. Gracias por la entrada de Dougal.

+0

Puede deshabilitar la protección y no se deshabilitó en las versiones anteriores de VirtualBox. Ver [mi respuesta] (http://stackoverflow.com/a/24353494/1168315) – Dominik

3

He encontrado exactamente el mismo error con virtualenv y VirtualBox (administrado a través de Vagrant) con un invitado de Ubuntu.

Recordando a un incidente previo, donde los permisos de archivos me causaron problemas que ha intentado girarlo en NFS compartiendo en mi Vagrantfile:

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

Esto resolvió el problema para mí. El proceso para conseguir NFS compartiendo en VirtualBox es un poco más complicado sin embargo:

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

9

Ahti Kitsik registró una solución en su blog: https://ahtik.com/fixing-your-virtualbox-shared-folder-symlink-error/

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1 

YOURSHAREFOLDERNAME es el nombre de la carpeta compartida según VirtualBox.

Si sucede utilizar Vagrant, aquí está la solución para su Vagrantfile:

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

¿por qué // vagabundo? – julestruong

+0

"Si está usando Vagrant". La carpeta compartida predeterminada es (o solía ser) '/ vagrant', por lo que este ejemplo muestra cómo hacer uso de eso. – Bryan

+0

Sería grandioso si aclaró si necesita ser la carpeta en el equipo invitado o host. Sin embargo, voy a intentarlo, con los dedos cruzados – codewizard

12

virtualenv está usando enlaces simbólicos (shutil.copytree los utiliza, consulte rastreo). La creación de enlaces simbólicos en una carpeta compartida de VirtualBox está deshabilitada. Prueba simple en el terminal (dentro de la máquina de invitados):

$ ln -s testfile 

O se obtendrá un failed to create symbolic link './testfile': Read-only file system o Protocol error.

Puede habilitar enlaces simbólicos en los directorios compartidos mediante la ejecución en el terminal en el host (solution from schisamo):

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

Reemplazar VM_NAME con el nombre de la máquina virtual, como se ve en el Administrador de VirtualBox:

VM_NAME example

y NAME_OF_YOUR_SHARED_FOLDER con el nombre de la carpeta compartida que se puede ver en la configuración de la máquina virtual :

Shared folders settings

Después de la configuración, reinicie el VirtualBox.

Puede comprobar la configuración (en el host) con

$ vboxmanage getextradata VM_NAME enumerate 

Fix for Windows (Ahti Kitsik) (gracias a Bryan's answer).


VirtualBox implementa enlaces simbólicos en los directorios compartidos de since version 4.0 (for Linux and Solaris) pero son disabled since version 4.1.8 por razones de seguridad. Esa puede ser la razón por la cual funcionó primero para ti y luego no.

+1

¿Qué es SHARE_NAME? – Meglio

+0

@Meglio Es el nombre de su carpeta compartida como en la configuración de VirtualBox. Lo cambié a 'NAME_OF_YOUR_SHARED_FOLDER' en mi respuesta. – Dominik

+0

Aún no está claro: qué configuraciones, p. Ej. si estoy usando Vagrant? ¿Es el nombre visto por el sistema operativo invitado o por el sistema operativo host? ¿Es solo nombre o ruta completa? Por favor podrías explicarme – Meglio

Cuestiones relacionadas