Virtualenv не создает среду

Я установил Virtualenv на Ubuntu 12.04 и использовал его для работы над образцом проекта под рабочим столом unity. Я использую 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 ответов


Virtualenv использует символические ссылки (shutil.copytree использует их, см. traceback). Создание символических ссылок в общей папке VirtualBox отключено. Простой тест в терминале (внутри гостевой машины):

$ ln -s testfile

либо вы получите failed to create symbolic link './testfile': Read-only file system или Protocol error.

вы можете включить символические ссылки в общих папках, выполнив в терминале хоста (решение от 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

исправление для Windows (Ahti Kitsik) (спасибо к Брайан).


VirtualBox реализовал символические ссылки для общих папок начиная с версии 4.0 (для Linux и Solaris) но отключен начиная с версии 4.1.8 по соображениям безопасности. Это может быть причиной того, что сначала это сработало для вас, а затем нет.


Ok после немного более углубленного поиска в Google обнаружил, что это проблема VirtualBox, а не проблема Ubuntu. Общие папки защищены от этого действия. Я не знаю, как/почему он работал в первый раз, но это известная ошибка. Я создал проект вне общей папки без проблем. Спасибо за информацию Дугал.


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

я столкнулся с этой же самой ошибкой с virtualenv и VirtualBox (управляется через Vagrant) с гостем Ubuntu.

вспоминая предыдущий инцидент, когда права доступа к файлам вызвали у меня проблемы, я попытался включить общий доступ к 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