2014-09-23 20 views
8

Tôi chạy cProfile trên tập lệnh python 3, hoạt động tốt, sau đó cố gắng hình dung nó bằng cách sử dụng lệnh chạy. Howvever, tôi có một màn hình trống và lỗi 'dữ liệu thô tục xấu'.Lỗi Marshal xấu - runnake

Tôi đã xóa tệp .pyc nhưng điều đó cũng không hoạt động.

Code tôi sử dụng để cài đặt runsnake là:

sudo apt-get install python-profiler python-wxgtk2.8 python-setuptoolD 
    sudo easy-install installSquareMap RunSnakeRun 

Tôi đang sử dụng Ubuntu.

Rất cám ơn.

lưu ý: Tôi nên thêm tôi đã cài đặt tất cả mọi thứ trong khi py3k được kích hoạt

Trả lời

5

tôi đã cùng một vấn đề. Theo như tôi có thể nói, gói RunSnakeRun chưa được chuyển sang Python3. Ít nhất, tôi có thể pip nó đến python2 nhưng không để python3 (SyntaxError). Hơn nữa, tôi nghĩ rằng định dạng đầu ra của cProfile không tương thích giữa python 2/3. Tôi đã không dành thời gian để tìm một xác nhận dứt khoát về điều này, nhưng trong tài liệu của cProfile class pstats.Stats(*filenames, stream=sys.stdout), họ nói "Tệp được chọn bởi hàm dựng ở trên phải được tạo bởi phiên bản hồ sơ hoặc cProfile tương ứng. không có khả năng tương thích tệp được đảm bảo với các phiên bản tương lai của trình lược tả này và không có khả năng tương thích với các tệp được tạo bởi các trình lược tả khác. ". Điều này có vẻ là nguồn gốc của vấn đề của bạn. Ví dụ: tôi đã tạo kết quả hồ sơ từ python3

import cProfile 
cProfile.run('some code to profile', 'restats') 

và cố gắng mở nó trong RunSnakeRun và gặp lỗi tương tự như bạn đã có. Hơn nữa, nếu tôi làm

import pstats 
p = pstats.Stats('restats') 
p.strip_dirs().sort_stats(-1).print_stats() 

trong python3, nó hoạt động như một sự quyến rũ. Nếu tôi làm điều đó trong python2, nó sẽ đưa ra lỗi nguyên soái. Bây giờ, RunSnakeRun được thực hiện trong python2 (trừ khi bạn tìm thấy một số cách để làm cho nó chạy trong python3). Vì vậy, tôi đoán là bạn đã thực hiện hồ sơ của bạn trong python3 và đang sử dụng các công cụ dựa trên python2 để phân tích chúng, mà các công cụ đang mong đợi đầu ra tương thích với python2.

Dự án RunSnakeRun có vẻ không hoạt động trong một thời gian (bản quyền trên home page là 2005-2011) và không có chỉ báo rằng nó sẽ được chuyển đến python3 .... Có thể xem xét công cụ trực quan thay thế có thể là tốt nhất cách để đi cho bạn nếu bạn muốn phát triển trong Python3. pyprof2calltree kết hợp với KCachegrind hoạt động tốt cho tôi trong Linux. Nó có thể cung cấp một cái nhìn trực quan tương tự về đầu ra lược tả như bạn sẽ nhận được từ RunSnakeRun.

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