2012-06-29 15 views
12

Ho installato Virtualenv su Ubuntu 12.04 e lo usavo per lavorare su un progetto di esempio sotto il desktop dell'unità. Sto usando VirtualBox e stavo avendo alcuni problemi con il desktop dell'unità così cambiato sul desktop di KDE.Virtualenv non crea un ambiente

Ora sto provando a creare un nuovo progetto ma virtualenv non mi permetterà di creare un nuovo ambiente nella mia cartella di progetto. Nel terminale a navigare nella cartella di progetto, digitare virtualenv venv e ottenere i seguenti messaggi di errore:

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

Qualcuno può aiutarmi a risolvere questo? Ho provato a reinstallare virtualenv ma nessuna gioia. Grazie

+0

Si sta lamentando che si sta tentando di creare un virtualenv su un filesystem di sola lettura. In quale directory stai cercando di farcela? Puoi "toccare" un file lì? – Dougal

+0

@Dougal È una cartella condivisa di vbox. Il progetto con l'ambiente di lavoro è anche in questa cartella. modifica: Sì, posso toccare un file nella stessa cartella. Creato un nuovo file senza problemi – adohertyd

+0

Okay: puoi 'mkdir -p venv/include/python2.7/numpy; touch venv/include/python2.7/numpy/test'? Forse 'venv' o una sottodirectory è un collegamento a un filesystem di sola lettura? – Dougal

risposta

11

Ok dopo un po 'più approfondito su google ha rilevato che si tratta di un problema di VirtualBox, non di un problema di Ubuntu. Le cartelle condivise sono protette da questa attività. Non so come/perché ha funzionato la prima volta ma è un bug noto. Ho creato un progetto al di fuori della cartella condivisa senza problemi. Grazie per l'input Dougal.

+0

È possibile disabilitare la protezione e non è stato disabilitato nelle versioni precedenti di VirtualBox. Vedi [la mia risposta] (http://stackoverflow.com/a/24353494/1168315) – Dominik

3

Ho riscontrato esattamente lo stesso errore con virtualenv e VirtualBox (gestito tramite Vagrant) con un guest Ubuntu.

Ricordando un episodio precedente in cui i permessi dei file mi ha causato problemi che ho provato a girare su NFS condivisione nella mia Vagrantfile:

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

Questo ha risolto il problema per me. Il processo per ottenere Condivisione NFS su VirtualBox è un po 'più coinvolto però:

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

9

Ahti Kitsik ha postato una soluzione sul suo blog: https://ahtik.com/fixing-your-virtualbox-shared-folder-symlink-error/

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1 

YOURSHAREFOLDERNAME è il nome della cartella condivisa secondo VirtualBox.

Se vi capita di essere utilizzando Vagrant, ecco la correzione per il vostro Vagrantfile:

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

perché // vagabondo? – julestruong

+0

"Se stai usando Vagrant". La cartella condivisa di default è (o era in passato) '/ vagrant', quindi questo esempio mostra come utilizzarlo. – Bryan

+0

Sarebbe bello se chiarissi se ha bisogno di essere la cartella sul computer ospite o host. Andando a fare un tentativo però, incrociamo le dita – codewizard

12

virtualenv sta usando collegamenti simbolici (shutil.copytree loro usi, vedi traceback). La creazione di collegamenti simbolici in una cartella condivisa di VirtualBox è disabilitata. semplice test a terminale (all'interno della macchina guest):

$ ln -s testfile 

O si otterrà un failed to create symbolic link './testfile': Read-only file system o Protocol error.

È possibile attivare i collegamenti simbolici in cartelle condivise eseguendo nel terminale sull'host (solution from schisamo):

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

Sostituire nome_macchina_virtuale con il nome della macchina virtuale, come si vede nella VirtualBox Responsabile:

VM_NAME example

e NAME_OF_YOUR_SHARED_FOLDER con il nome della cartella condivisa che potete vedere nelle impostazioni della macchina virtuale :

Shared folders settings

Dopo l'impostazione, riavviare il VirtualBox.

È possibile controllare le impostazioni (sull'host) con

$ vboxmanage getextradata VM_NAME enumerate 

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


VirtualBox implementati i collegamenti simbolici per le cartelle condivise since version 4.0 (for Linux and Solaris) ma sono disabled since version 4.1.8 per motivi di sicurezza. Questo potrebbe essere il motivo per cui prima ha funzionato per te e dopo non.

+1

Che cos'è SHARE_NAME? – Meglio

+0

@Meglio È il nome della cartella condivisa come nelle impostazioni di VirtualBox. Modificato come 'NAME_OF_YOUR_SHARED_FOLDER' nella mia risposta. – Dominik

+0

Ancora non chiaro: quali impostazioni, ad es. se sto usando Vagrant? È il nome visto dal sistema operativo guest o dal sistema operativo host? È solo un nome o un percorso completo? Per favore, potresti spiegare? – Meglio

Problemi correlati