2016-02-15 25 views
10

Tôi có một gói có một mô-đun giúp người dùng tạo các ô cụ thể bằng cách sử dụng matplotlib. Khi tôi gọi các hàm này trong các thử nghiệm đơn vị của tôi bên trong Travis, tôi nhận được lỗi sau:Thử nghiệm các ô dựa trên matplotlib trong Travis CI

RuntimeError: Invalid DISPLAY variable 

Làm cách nào để khắc phục điều đó?

Sau khi tạo cốt truyện, chức năng của tôi thường gọi là pyplot.show(), mở ra một cửa sổ cần đóng. Khi tôi gọi những chức năng này trong bài kiểm tra đơn vị của tôi bên trong Travis, họ bị treo lên mãi mãi.

Làm cách nào để kiểm tra xem các ô này có đang được tạo bằng Travis CI không?

Trả lời

10

Để đặt biến DISPLAY bên trong Travis, bạn cần mô phỏng hiển thị từ bên trong VM của chúng. They teach how to do it sử dụng xvfb bằng cách thêm dòng sau vào các before_script của yout .travis.yml file:

before_script: # configure a headless display to test plot generation 
- "export DISPLAY=:99.0" 
- "sh -e /etc/init.d/xvfb start" 
- sleep 3 # give xvfb some time to start 

Để cho Travis không để treo lên trên thửa, chỉ cần không gọi pyplot.show(). Nếu bạn đang thử nghiệm quá nhiều ô, hãy đảm bảo gọi số pyplot.close() hoặc nó sẽ khiếu nại về việc có quá nhiều hình ảnh mở.

+0

Tác phẩm này hoạt động! FYI nếu bạn cũng đang sử dụng [tox] (https://pypi.python.org/pypi/tox), đừng quên thêm 'DISPLAY' vào' passenv' – shapiromatron

0

Bạn có thể giải quyết vấn đề này mà không đặt hiển thị rõ ràng bằng cách sử dụng phần phụ trợ "cấp cao" trong matplotlib. Điều này là cần thiết anyway, theo kinh nghiệm của tôi, để đảm bảo tính nhất quán của các hình ảnh được tạo ra. Chỉ cần đảm bảo rằng bạn

matplotlib.use('agg') 

trước khi bạn nhập pyplot hoặc pylab. Tôi đã giải thích thêm here.

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