2012-05-10 33 views
11

Tôi muốn tạo một virtualenv bằng cách sử dụng một điểm khác làm điểm bắt đầu, điều này có khả thi không?Virtualenv có thể kế thừa từ chương trình khác không?

tôi phải trường hợp sử dụng trong tâm trí:

  1. Hãy nói rằng tôi có một hai virtualenv một phục vụ sản xuất và một cho phát triển. Môi trường phát triển đòi hỏi các gói giống như môi trường sản xuất, nhưng nó đòi hỏi những người khác mà tôi không muốn trong môi trường sản xuất. Tôi không muốn cài đặt các gói thông thường hai lần.

  2. Tôi muốn thử nghiệm với phiên bản phát triển của gói, ví dụ: matplotlib. Phiên bản phát triển của gói có cùng yêu cầu với phiên bản ổn định. Vì vậy, tôi tạo một virtualenv được gọi là matplotib_stable và cài đặt các yêu cầu và phiên bản ổn định. Sau đó, tôi tạo một số virtualenv thứ hai được gọi là matplotlib_dev và sử dụng matplotlib_stable làm điểm khởi đầu (cho các yêu cầu matplotlib) nhưng sau đó tôi cài đặt phiên bản phát triển.

How do I install from a local cache with pip? dường như giải quyết vấn đề tải gói, nhưng tôi không nghĩ rằng nó giao dịch với sửa đổi sys.path.

Trả lời

12

Một giải pháp là sử dụng lệnh add2virtualenv của virtualenvwrapper. Điều này

Thêm các thư mục được chỉ định vào đường dẫn Python cho virtualenv hiện đang hoạt động.

Vì vậy, nếu tôi có hai virtualenv, ENV1ENV2, và tôi muốn ENV2 để truy cập gói trong ENV1, sau đó tôi cần phải:

  1. kích hoạt ENV2:

    workon ENV2

  2. thêm gói trang web của ENV1 s thư mục sử dụng add2virtualenv:

    add2virtualenv $WORKON_HOME/ENV1/lib/python2.6/site-packages

Ở trên giả định $WORKON_HOME là vị trí của thư mục virtualenv của bạn, và rằng bạn đang sử dụng python2.6, vì vậy rõ ràng là điều chỉnh những cách phù hợp.

Trong khi điều này cung cấp quyền truy cập vào các gói, nó không điều chỉnh đường dẫn vỏ. Nói cách khác, các tập lệnh được cài đặt vào thư mục bin không thể truy cập bằng phương pháp này.

+0

Khi tôi cài đặt gói tương tự với các phiên bản khác nhau trên cả hai virtualenvs, tôi phát hiện ra env bên ngoài (ENV1) được dùng ưu tiên hơn env nội bộ (ENV2). Có vẻ như add2virtualenv đặt đường dẫn của nó trước đó trên danh sách nhập sys.path. Một giải pháp dễ dàng là làm theo lệnh trên với lệnh này: 'add2virtualenv $ WORKON_HOME/ENV2/lib/python2.6/site-packages' và sau đó nó hoạt động như một sự quyến rũ. – Yonatan

+0

@Yann Cảm ơn Yann! Tôi cài đặt pylint trong ENV1, sau đó 'add2virtualenv $ WORKON_HOME/ENV1/lib/python3.4/site-packages', nhưng pylint không hoạt động! – HelloNewWorld

+1

@HelloNewWorld Tôi đã không sử dụng 'virtualenv' và' vertualenvwrapper' trong một thời gian, tại sao không đăng câu hỏi mới về vấn đề này? – Yann

-1

Phần sau có vẻ phù hợp với tôi. Giả sử một môi trường ảo cũ mà bạn muốn kế thừa từ được gọi là old.Vì bạn có thể xác định những trăn phiên bản để sử dụng khi tạo ra một môi trường mới, bạn chỉ cần làm:

virtualenv -p path_to_venvs/old/bin/python --system-site-packages new_env 
+0

Thật không may, bạn không thể kế thừa virtualenv theo cách này. Thông báo tin nhắn trong đầu ra của lệnh của bạn: ** Sử dụng tiền tố cơ sở '/ usr' ** – allprog

+0

Hmm bạn nói đúng, tôi nhận được thông báo này. Tuy nhiên, đối với tất cả các mục đích thực tế, nó vẫn hoạt động cho tôi - tôi có thể nhập các gói từ virtualenv cũ trong khi sử dụng gói mới. Tôi sẽ điều tra điều này! – Lisa

+0

Bạn có chắc là bạn đang sử dụng env cũ không? Cài đặt một cái gì đó bạn không có trong hệ thống cài đặt và cố gắng nhập khẩu đó. – allprog

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