2012-06-29 60 views
12

Tôi đã cài đặt Virtualenv trên Ubuntu 12.04 và đang sử dụng nó để làm việc trên một dự án mẫu dưới màn hình nền tảng thống nhất. Tôi đang sử dụng VirtualBox và đã có một số vấn đề với máy tính để bàn thống nhất nên đã thay đổi sang màn hình nền KDE.Virtualenv không tạo môi trường

Tôi hiện đang cố tạo dự án mới nhưng virtualenv sẽ không cho phép tôi tạo môi trường mới trong thư mục dự án của mình. Trong thiết bị đầu cuối, tôi điều hướng đến thư mục dự án, nhập virtualenv venv và nhận các thông báo lỗi sau:

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

Có thể giúp tôi giải quyết vấn đề này không? Tôi đã thử cài đặt lại virtualenv nhưng không có niềm vui. Cảm ơn

+0

Việc khiếu nại là bạn đang cố tạo virtualenv trên hệ thống tệp chỉ đọc. Bạn đang cố gắng tạo thư mục nào? Bạn có thể 'chạm vào một tập tin ở đó không? – Dougal

+0

@Dougal Đó là thư mục được chia sẻ vbox. Dự án với env làm việc cũng nằm trong thư mục này. chỉnh sửa: Có, tôi có thể chạm vào một tệp trong cùng một thư mục. Đã tạo tệp mới không có vấn đề – adohertyd

+0

OK: bạn có thể 'mkdir -p venv/include/python2.7/numpy; chạm venv/include/python2.7/numpy/test'? Có lẽ 'venv' hoặc một subdir là một liên kết đến một hệ thống tập tin chỉ đọc? – Dougal

Trả lời

11

Ok sau một chút googling chuyên sâu tìm thấy rằng đây là một vấn đề VirtualBox, không phải là một vấn đề Ubuntu. Các thư mục được chia sẻ được bảo vệ khỏi hoạt động này. Tôi không biết làm thế nào/tại sao nó làm việc lần đầu tiên nhưng nó là một lỗi đã biết. Tôi đã tạo một dự án bên ngoài thư mục được chia sẻ mà không gặp vấn đề gì. Cảm ơn Dougal đầu vào.

+0

Bạn có thể tắt tính năng bảo vệ và nó không bị vô hiệu hóa trong các phiên bản VirtualBox cũ hơn. Xem [câu trả lời của tôi] (http://stackoverflow.com/a/24353494/1168315) – Dominik

3

Tôi đã gặp phải lỗi chính xác này với virtualenv và VirtualBox (được quản lý thông qua Vagrant) với khách Ubuntu.

Nhớ một sự cố trước khi cho phép file gây ra cho tôi vấn đề tôi đã cố gắng bật nfs chia sẻ trong Vagrantfile tôi:

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

này đã giải quyết được vấn đề đối với tôi. Quá trình nhận được nfs chia sẻ trên VirtualBox là tham gia nhiều hơn một chút mặc dù:

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

9

Ahti Kitsik đăng tải một workaround trên blog của mình: https://ahtik.com/fixing-your-virtualbox-shared-folder-symlink-error/

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1 

YOURSHAREFOLDERNAME là tên của thư mục chia sẻ theo VirtualBox.

Nếu bạn tình cờ được sử dụng Vagrant, đây là bản sửa lỗi cho Vagrantfile của bạn:

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

lý do tại sao // lang thang? – julestruong

+0

"Nếu bạn tình cờ sử dụng Vagrant". Thư mục chia sẻ mặc định là (hoặc đã từng là) '/ vagrant', vì vậy ví dụ này cho thấy cách sử dụng điều đó. – Bryan

+0

Sẽ thật tuyệt nếu bạn làm rõ nếu nó cần phải là thư mục trên máy khách hoặc máy chủ. Mặc dù vậy, các ngón tay đã vượt qua – codewizard

12

virtualenv đang sử dụng liên kết tượng trưng (shutil.copytree sử dụng chúng, hãy xem traceback). Tạo liên kết tượng trưng trong một thư mục chia sẻ VirtualBox bị tắt. kiểm tra đơn giản trong thiết bị đầu cuối (bên trong máy khách):

$ ln -s testfile 

Hoặc bạn sẽ nhận được một failed to create symbolic link './testfile': Read-only file system hay Protocol error.

Bạn có thể bật symbolic link trong thư mục chia sẻ bằng cách thực hiện tại nhà ga trên host (solution from schisamo):

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

Thay VM_NAME với tên của máy ảo, như đã thấy trong VirtualBox Manager:

VM_NAME example

và NAME_OF_YOUR_SHARED_FOLDER với tên của thư mục chia sẻ mà bạn có thể thấy trong các thiết lập của máy ảo :

Shared folders settings

Sau khi cài đặt, khởi động lại VirtualBox.

Bạn có thể kiểm tra các thiết lập (trên host) với

$ vboxmanage getextradata VM_NAME enumerate 

Fix for Windows (Ahti Kitsik) (nhờ Bryan's answer).


VirtualBox thực hiện liên kết tượng trưng cho các thư mục chia sẻ since version 4.0 (for Linux and Solaris) nhưng disabled since version 4.1.8 vì lý do an ninh. Đó có thể là lý do tại sao nó đầu tiên làm việc cho bạn và sau đó không.

+1

SHARE_NAME là gì? – Meglio

+0

@Meglio Đó là tên của thư mục được chia sẻ của bạn như trong cài đặt VirtualBox. Đã thay đổi nó thành 'NAME_OF_YOUR_SHARED_FOLDER' trong câu trả lời của tôi. – Dominik

+0

Vẫn chưa rõ - cài đặt nào, ví dụ: nếu tôi đang sử dụng Vagrant? Đó có phải là tên được nhìn thấy bởi os của khách hoặc bởi os máy chủ? Nó chỉ là tên hoặc đường dẫn đầy đủ? Xin bạn có thể giải thích. – Meglio

Các vấn đề liên quan