2013-08-16 37 views
18

Tôi đã sử dụng các thiết lập thủ công VirtualBox với virtualenv bên trong chúng để chạy các dự án Django trên máy cục bộ của tôi. Gần đây tôi phát hiện ra Vagrant và quyết định chuyển sang nó, bởi vì nó có vẻ rất dễ dàng và hữu ích.
Nhưng tôi không thể hình dung - tôi có cần sử dụng virtualenv Vagrant VM không, nó có được khuyến khích thực hành hay bị cấm không?Tôi có cần sử dụng virtualenv với Vagrant không?

+1

nếu bạn sử dụng virtualenv trên lang thang, hãy chú ý vì tốc độ chậm khi virtualenv nằm trong thư mục được chia sẻ mơ hồ. thêm ở đây: http://stackoverflow.com/questions/18972471/python-virtualenv-is-very-slow/27844226#27844226 – amwinter

+0

Tôi không biết tại sao nhiều người trả lời câu hỏi này với "không sử dụng virtualenv nhưng tạo gói virtualenv-usable ", tạo gói python là một quá trình độc lập và bạn vẫn có thể' pip install' gói ngay cả khi bạn không ở trong virtualenv. Vì vậy, tất nhiên mọi phần mềm python nên hỗ trợ setuptools. – erikbwork

Trả lời

12

Nếu bạn chạy một VM lang thang cho mỗi dự án, thì không có lý do trực tiếp nào để sử dụng virtualenv.

Nếu những người đóng góp khác không sử dụng âm đạo, nhưng hãy sử dụng virtualenv, sau đó bạn có thể muốn sử dụng nó và hỗ trợ nó để làm cho cuộc sống của họ dễ dàng hơn.

+0

'một máy ảo lang thang cho mỗi dự án' - bạn có nghĩa là Vagrant hoạt động theo cách như vậy nếu tôi thêm một hộp vào nó và sử dụng nó trong nhiều dự án - chúng sẽ không sử dụng các tệp vdi riêng lẻ, chúng sẽ chia sẻ cùng một hệ điều hành và các thiết lập của chúng trên đó? –

+3

Không, bạn có thể sử dụng một hộp - một hộp chỉ là mẫu cho máy ảo. Tôi chỉ có nghĩa là nếu nhiều dự án sử dụng cùng một thư mục và thư mục đó là một môi trường mơ hồ, thì các dự án không bị cô lập với nhau. –

29

Devin stated, không cần thiết phải sử dụng virtualenv khi bạn triển khai vào máy không có người đặt hàng miễn là bạn là người dùng duy nhất của máy. Tuy nhiên, tôi vẫn cho phép sử dụng một số virtualenv, setup.py, v.v. ngay cả khi bạn không sử dụng nó để phát triển hoặc triển khai.

In (không như vậy) thiển ý của tôi, bất kỳ dự án Python nên:

  1. Bao gồm một .cvsignore, .gitignore, .hgignore ... tập tin mà bỏ qua các Python chung các tệp trung gian cũng như các thư mục virtualenv.
  2. Một requirements.txt tập tin liệt kê các gói cần thiết trong một định dạng pip-compliant
  3. Bao gồm một Makefile với các mục tiêu sau đây:

    • môi trường: tạo môi trường ảo bằng cách sử virtualenv hay pyvenv
    • yêu cầu: cài đặt gói bắt buộc s sử dụng piprequirements.txt tập tin
    • phát triển: chạy setup.py develop sử dụng môi trường ảo
    • kiểm tra: chạy setup.py test
    • sạch: loại bỏ các file trung gian, báo cáo bảo hiểm vv
    • duy trì-sạch: xóa môi trường ảo

    Ý tưởng là giữ Makefile càng đơn giản càng tốt. Các phụ thuộc nên được thiết lập để bạn có thể sao chép kho lưu trữ (hoặc giải nén tệp tarball nguồn) và chạy make test. Nó sẽ tạo ra một môi trường ảo, cài đặt các yêu cầu và chạy các bài kiểm tra đơn vị.

Bạn cũng có thể bao gồm một Vagrantfile và lang thang mục tiêu trong Makefile chạy lang thang lên. Thêm vagrant destroy vào mục tiêu duy trì-sạch khi bạn đang ở đó.

Điều này làm cho dự án của bạn có thể sử dụng được bởi bất kỳ ai sử dụng âm đạo hoặc phát triển mà không có nó. Nếu (khi) bạn cần sử dụng triển khai cùng với một dự án khác trong môi trường âm đạo hoặc vật lý, bao gồm setup.pyVagrantfile mô tả môi trường tối thiểu của bạn dễ dàng cài đặt vào môi trường ảo hoặc máy móc.

+3

Bạn có thể đưa ra một số ví dụ về dự án như vậy không? – Bunyk

7

Virtualenv và các hình thức cách ly khác (Docker, VM chuyên dụng, ...) không nhất thiết phải loại trừ lẫn nhau. Sử dụng virtualenv vẫn là một ý tưởng hay, ngay cả trong một môi trường riêng biệt, để che chắn cho hệ thống ảo Python từ các gói dự án của bạn. * Các hệ thống nix sử dụng rất nhiều tiện ích dựa trên Python phụ thuộc vào các phiên bản cụ thể của các gói đang có sẵn trong Python hệ thống và bạn không muốn gây rối với các phiên bản này.

Hãy nhớ rằng virtualenv vẫn chỉ có thể đi xa như gói Python thuần túy và không giải quyết được tình huống với tiện ích mở rộng gốc sẽ vẫn kết hợp với hệ thống.

+1

Tôi đánh giá cao câu trả lời này sau khi đi tuyến đường của câu trả lời đã chọn và xử lý các vấn đề nhập gói kỳ lạ. Sau khi lãng phí thời gian, tôi trở lại sử dụng môi trường ảo; vì vậy tôi khuyên bạn nên. Nó giúp bạn tiết kiệm một số phần của tâm trí (trừ khi bạn là một python/linux pro và muốn đối phó với nó). – mehmet

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