Virtualenvs nên được tạo ở đâu?


106

Tôi bối rối không biết tôi nên đặt Virtualenv ở đâu.

Với dự án django đầu tiên của mình, tôi đã tạo dự án bằng lệnh

django-admin.py startproject djangoproject

Sau đó, tôi cd'd vào thư mục djangoproject và chạy lệnh

virtualenv env

đã tạo thư mục môi trường ảo ở cùng cấp với djangoprojectthư mục bên trong .

Đây có phải là nơi sai để tạo virtualenv cho dự án cụ thể này không?

Tôi có ấn tượng rằng hầu hết mọi người giữ tất cả các virtualenv của họ cùng nhau trong một thư mục hoàn toàn khác, ví dụ: ~/virtualenvsvà sau đó sử dụng virtualenvwrapper để chuyển đổi qua lại giữa chúng.

Có một cách chính xác để làm điều này?

Câu trả lời:


128

Nhiều người sử dụng công cụ virtualenvwrapper , công cụ này giữ tất cả các virtualenv ở cùng một nơi ( ~/.virtualenvsthư mục) và cho phép các phím tắt để tạo và giữ chúng ở đó. Ví dụ, bạn có thể làm:

mkvirtualenv djangoproject

và sau đó:

workon djangoproject

Có lẽ là một ý tưởng tồi nếu giữ thư mục virtualenv trong chính dự án, vì bạn không muốn phân phối nó (nó có thể dành riêng cho máy tính hoặc hệ điều hành của bạn). Thay vào đó, hãy giữ một tệp tin request.txt bằng pip :

pip freeze > requirements.txt

và phân phối điều đó. Điều này sẽ cho phép những người khác sử dụng dự án của bạn cài đặt lại tất cả các yêu cầu tương tự vào virtualenv của họ với:

pip install -r requirements.txt

đẹp Tôi hadnt bao giờ nhìn vào những thứ pip nhưng nếu tôi cần phải một ngày nào đó điều này sẽ có ích
Joran Beasley

pip rất phổ biến trong cộng đồng Django và rất dễ sử dụng.
David Robinson

Cảm ơn David, đó là những gì tôi nghĩ. Tôi biết về các yêu cầu và đang làm điều đó. Tôi chỉ không chắc chắn về nơi venv nên đi. Nhận xét của bạn về việc nó dành riêng cho hệ điều hành là một lời biện minh tốt cho việc thực hiện những gì bạn đề xuất.
Ray

Có thể di chuyển một môi trường ảo sau khi nó đã được tạo không? Tôi không khéo léo đặt nó vào bên trong thư mục dự án của mình
James Wierzba

6
Không phải là một IMO biện minh tuyệt vời. Đây không phải là những gì .gitignore dành cho?
Josh Noe

24

Thay đổi vị trí của thư mục virtualenv phá vỡ nó

Đây là một lợi thế của việc đặt thư mục bên ngoài cây kho, ví dụ như dưới ~/.virtualenvswith virutalenvwrapper.

Ngược lại, nếu bạn giữ nó trong cây dự án, việc di chuyển vị trí dự án sẽ phá vỡ virtualenv.

Xem: Đổi tên thư mục virtualenv mà không phá vỡ nó

--relocatablenhưng nó được biết là không hoàn hảo.

Một lợi thế nhỏ khác: bạn không cần phải làm .gitignorenhư vậy.

Những lợi thế của việc đưa nó vào cây dự án là:

  • giữ những thứ liên quan gần nhau.
  • bạn có thể sẽ không bao giờ sử dụng lại một virtualenv đã cho trong các dự án, vì vậy việc đặt nó ở nơi khác không mang lại nhiều lợi ích

3
Đây là đối số hợp lý duy nhất mà tôi đã thấy để tạo các thư mục virtualenv bên ngoài cây dự án! Hướng dẫn khác dường như lặp lại giáo điều 'tập trung hóa' như thể nó vốn dĩ là một phương pháp hay nhất thay vì một sự thỏa hiệp đáng tiếc do các virtualenv bị hỏng về cơ bản (mặc dù khá hữu ích!).
rob3c 20/09/2018

Rất tiếc, tôi chưa hiểu rõ điều gì đó, vì vậy bạn khuyên bạn nên tạo nó trong cây dự án và sau đó "gitignoring" nó hay tạo nó trong ~ / .virtualenvs? "If it was not for that" ám chỉ điều gì?
aderchox

1
@aderchox có một sự cân bằng: đặt nó vào cây dự án và cây nó di chuyển, bạn phải cài đặt lại hoặc đặt nó vào ~ nhưng quản lý trên phụ thêm ngoài dự án.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功


0

Nếu bạn sử dụng pyenv install Python, thì pyenv-virtualenv sẽ là một phương pháp hay nhất. Nếu tập .python-versiontin được đặt , nó có thể tự động kích hoạt hoặc hủy kích hoạt env ảo khi bạn thay đổi thư mục công việc. Pyenv-virtualenvcũng đặt tất cả env ảo vào $HOME/.pyenv/versionsthư mục.


0

Từ kinh nghiệm cá nhân của tôi, tôi khuyên bạn nên tổ chức tất cả các môi trường ảo trong một thư mục duy nhất. Trừ khi ai đó có trí nhớ cực kỳ nhạy bén và có thể nhớ các tệp / thư mục nằm rải rác trên hệ thống tệp. Không phải là người thích sử dụng các công cụ khác chỉ để quản lý môi trường ảo. Trong VSCode nếu tôi cấu hình ( python.venvPath) thư mục chứa tất cả các môi trường ảo, nó có thể tự động nhận ra tất cả chúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.