Virtualenv не создает среду
Я установил Virtualenv на Ubuntu 12.04 и использовал его для работы над образцом проекта под единым рабочим столом. Я использую VirtualBox и имею некоторые проблемы с рабочим столом единства, поэтому он был изменен на рабочий стол 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, но без радости. Благодаря
Ответы
Ответ 1
После немного более глубокого поиска в Google обнаружено, что это проблема VirtualBox, а не проблема Ubuntu. Общие папки защищены от этой активности. Я не знаю, как/почему он работал в первый раз, но это известная ошибка. Я создал проект за пределами общей папки без проблем. Спасибо за вход Дугала.
Ответ 2
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) (спасибо Bryan answer).
VirtualBox реализовал символические ссылки для общих папок начиная с версии 4.0 (для Linux и Solaris), но отключен после версии 4.1.8 по соображениям безопасности. Это может быть причиной, по которой она сначала работала для вас, а затем и нет.
Ответ 3
Ахти Кицик опубликовал обходной путь в своем блоге:
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
Ответ 4
Я столкнулся с такой же ошибкой с 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