2012-06-14 11 views
11

phép nói rằng tôi đã tạo ra một virtualenv gọi venv (virtualenv venv)virtualenv "venv/bin/kích hoạt" vs "nguồn venv/bin/kích hoạt"

Từ hướng dẫn đọc, tôi đọc có 2 cách để kích hoạt ảo env:

  1. . venv/bin/activate

  2. source venv/bin/activate

Tôi nghĩ rằng cả hai đều hoàn thành cùng một điều, nhưng tôi không hiểu những gì đang xảy ra.

Cũng cho số 1, không phải là "." chỉ có nghĩa là thư mục hiện tại? nhưng nó không hoạt động nếu tôi chỉ cần gõ vào "venv/bin/kích hoạt" mà không có "."

mọi trợ giúp sẽ tuyệt vời!

Trả lời

19

.source làm chính xác điều tương tự, với sự khác biệt duy nhất là trong khi source dễ đọc hơn, có thể không có sẵn trong tất cả các trình bao.

Lệnh chạy nội dung của tập lệnh trong trình bao hiện tại và điều này quan trọng trong trường hợp activate, vì một trong những điều mà tập lệnh thực hiện là xuất và sửa đổi biến môi trường trong trình bao hiện tại của bạn.

Nếu bạn chạy nó bằng cách sử dụng ./path/to/activate, tập lệnh sẽ được chạy trong một vỏ con và tất cả các biến môi trường được đặt sẽ bị mất khi tập lệnh hoàn tất và vỏ con chấm dứt.

Cũng cho số 1, không phải là "." chỉ có nghĩa là thư mục hiện tại?

. có ý nghĩa khác tùy thuộc vào ngữ cảnh. Nó chỉ có nghĩa là "thư mục hiện tại" khi được sử dụng làm (hoặc một phần) đường dẫn.

Từ http://en.wikipedia.org/wiki/Dot_%28Unix%29:

Dấu chấm lệnh không phải là để bị nhầm lẫn với một dot file, which is a dot-prefixed hidden file or hidden directory.


Là một sang một bên, tôi sẽ đề nghị bạn hãy xem virtualenvwrapper cung cấp lệnh wrapper bổ sung mà làm cho virtualenv dễ dàng hơn để sử dụng.

Sử dụng virtualenvwrapper, chuyển sang một evironment được thực hiện đơn giản bằng cách gọi:

workon YOUR_ENV 
+0

Nguồn là một bashism. –

+0

@JohnP oops. Tôi có thể đã vô tình chỉnh sửa điều đó. Hãy để tôi đặt nó trở lại. –

+0

Nếu bạn đang sử dụng Ubuntu, bạn phải cẩn thận với việc sử dụng Dash và trong các phiên bản trước đó/bin/bash chỉ vào dấu gạch ngang (không chắc chắn nếu nó vẫn làm), do đó nguồn không làm việc, nhưng. làm việc tốt. –

4

Lệnh . về cơ bản là bí danh cho số source. Cả hai đều thực hiện một kịch bản nhất định trong trình bao hiện tại mà không cần tạo một trình bao mới.

Here là một số ví dụ hay.

+1

cách khác xung quanh: '.'là [lệnh được chỉ định POSIX] (http://pubs.opengroup.org/onlinepubs/009696699/utilities/dot.html) hoạt động ở mọi nơi,' nguồn' là bí danh (có sẵn trên một tập con của các trình bao). –