2013-09-23 62 views
14

Gần đây, tôi đã gặp phải một số vấn đề với việc chạy các phép đo vùng phủ sóng trong môi trường ảo. Tôi không nhớ các vấn đề tương tự trong quá khứ, cũng như tôi không thể tìm thấy giải pháp trên web.Chạy vùng phủ sóng bên trong virtualenv

Về cơ bản, khi tôi đang cố gắng chạy bộ thử nghiệm trong virtualenv, nó hoạt động tốt. Nhưng ngay sau đó, khi tôi cố gắng làm điều đó bằng cách sử dụng coverage, nó không thành công vì thiếu các mô-đun nó đòi hỏi. Dựa trên một số câu trả lời trên StackOverflow tôi đã kiểm tra kịch bản của mình và phát hiện ra rằng coverage sử dụng trình thông dịch khác nhau, ngay cả khi chạy từ bên trong cùng một virtualenv.

Dưới đây là làm thế nào để tái tạo nó:

$ virtualenv --no-site-packages venv 
New python executable in venv/bin/python 
Installing Setuptools................................................done. 
Installing Pip.......................................................done. 
$ source venv/bin/activate 
(venv)$ echo 'import sys; print(sys.executable)' > test.py 
(venv)$ python test.py 
/home/tadeck/testground/venv/bin/python 
(venv)$ coverage run test.py 
/usr/bin/python 

Câu hỏi đặt ra là: làm thế nào để làm cho coverage làm việc với môi trường ảo hoàn hảo? Tôi có thể thay đổi sys.path hoặc cài đặt các mô-đun được yêu cầu trên toàn hệ thống, nhưng phải có cách thức rõ ràng hơn.

+0

Tôi không thể tạo lại điều này trên cửa sổ, tôi sợ. Bảo hiểm hoạt động tốt. + 1 để giúp một pythonista đồng cần :) –

+1

Bạn đã thử cài đặt gói '' coverage'' trong virtualenv mà bạn đang tạo chưa? – fjarri

+0

@ Bogdan: Nó đã có ở đó, vì vậy tôi không cố gắng (lại) cài đặt nó. Nhưng khi tôi thực hiện 'pip install -U coverage', tôi nhận được" 'Yêu cầu đã được cập nhật: vùng phủ sóng trong./Venv/lib/python2.7/site-packages'". – Tadeck

Trả lời

11

pip install coverage trong venv mới của bạn

[[email protected] ~]$ virtualenv venv 
[[email protected] ~]$ source venv/bin/activate 
(venv)[[email protected] ~]$ pip install coverage 
(venv)[[email protected] ~]$ echo 'import sys; print(sys.executable)' > test.py 
(venv)[[email protected] ~]$ python test.py 
/home/alex/venv/bin/python 
(venv)[[email protected] ~]$ coverage run test.py 
/home/alex/venv/bin/python 
(venv)[[email protected] ~]$ 
+0

Giải pháp của bạn đã giúp - tôi đã cài đặt lại 'vùng phủ sóng 'bên trong virtualenv. Nó đã được cài đặt, nhưng bằng cách nào đó lệnh được ghi đè nad đã trỏ đến địa điểm sai. Bây giờ nó hoạt động đúng. Cảm ơn bạn! – Tadeck

+0

Điều này cũng phù hợp với tôi. Tôi nghĩ rằng việc cài đặt vùng phủ sóng trên toàn cầu là đủ, nhưng nó vẫn giữ các lỗi nhập liên quan đến các gói được cài đặt trong môi trường ảo của tôi, mặc dù tôi đã kích hoạt môi trường ảo khi chạy vùng phủ sóng ... trường hợp. –

13

tôi phải rời virtualenv của tôi sau khi cài đặt vùng phủ sóng và kích hoạt nó để có được vùng phủ sóng để làm việc.

[[email protected] ~]$ virtualenv --no-site-packages venv 
[[email protected] ~]$ source venv/bin/activate 
(venv)[[email protected] ~]$ pip install coverage 
(venv)[[email protected] ~]$ deactivate 
[[email protected] ~]$ source venv/bin/activate 
+0

Tôi xin lỗi, đó không phải là câu trả lời, đó là báo cáo lỗi cho người bảo trì virtualenv. – Tritium21

+4

Không chắc chắn tại sao bạn có một downvote cho điều này, chính xác những gì đã gây ra vấn đề của tôi. Upvotes tất cả các xung quanh. –

+0

Bất cứ ai biết ma thuật nào đang hoạt động ở đây? – Ullullu