2016-06-03 47 views
8

python2.7 में उठाती pympler example निम्नलिखित:pympler, लेखन त्रुटि

from anotherfile import somefunction, somecustomclass 
from os import path, listdir 
import pandas as pd 
import gc 
from pympler import tracker, muppy, summary 

all_objects = muppy.get_objects() 
print 'all objects: ', len(all_objects) 
sum1 = summary.summarize(all_objects) 
summary.print_(sum1) 

यह आयात के बाद पहले कोड है। यह

/usr/bin/python2.7 /myprog.py 
all objects: 98755 
Traceback (most recent call last): 
File "/myprog.py", line 12, in <module> 
sum1 = summary.summarize(all_objects) 
File "/usr/local/lib/python2.7/dist-packages/pympler/summary.py", line 131, in summarize 
total_size[otype] = _getsizeof(o) 
File "/usr/local/lib/python2.7/dist-packages/pandas/core/base.py", line 130, in __sizeof__ 
return super(self, PandasObject).__sizeof__() 
TypeError: super() argument 1 must be type, not FrozenList 

Process finished with exit code 1 

में परिणाम है जब मैं एक SummaryTracker वस्तु प्रारंभ करने की कोशिश मैं एक ही त्रुटि मिलती है।

यह पिम्प्लर में एक बग जैसा दिखता है, लेकिन तथ्य यह है कि मुझे इसका कोई उल्लेख नहीं मिल रहा है। आधिकारिक documentation के अनुसार, "पिमप्लर पूरी तरह से पाइथन में लिखा गया है, बाहरी पुस्तकालयों के लिए कोई निर्भरता नहीं है। इसका परीक्षण लिनक्स, विंडोज और मैकोज़ एक्स पर पायथन 2.5, 2.6, 2.7, 3.1, 3.2, 3.3, 3.4 के साथ किया गया है।"

from pympler import muppy, tracker 

tr = tracker.SummaryTracker() 
tr.print_diff() 

तो क्या मुझे याद आ रही: वास्तव में, एक नया अजगर फ़ाइल में अजगर 2.7 के साथ ही निम्नलिखित कोड चलाने किसी भी त्रुटि और काम करता है के रूप में उम्मीद का उत्पादन नहीं करता?

उत्तर

1

यह Pandas issue #12924 है। PandasObject.__sizeof__ में super कॉल के गलत क्रम में तर्क थे। फिक्स खींच लिया गया है, और यह अगली रिलीज में उपलब्ध होना चाहिए। इस बीच, आप तर्क आदेश को स्विच करने के लिए pandas/core/base.py संपादित कर सकते हैं, या आप बग की उपस्थिति और बंदर-पैच को सही संस्करण के साथ विधि का परीक्षण कर सकते हैं।

+1

6 फरवरी, 2017: पांडा को अद्यतन करने से मेरे लिए यह समस्या हल हो गई। –

0

शायद कोड को केवल Python3 के साथ काम करना चाहिए। this question में, वहाँ को Python2 के लिए एक ही त्रुटि है और यदि आप स्वीकार किए जाते हैं प्रतिक्रिया को देखो यह कहते हैं:

सुपर() (तर्क के बिना) python3 में पेश किया गया:

सुपर() -> सुपर के रूप में ही (वर्ग,)

ताकि नई शैली कक्षाओं के लिए को Python2 बराबर होगा:

सुपर (CurrentClass, आत्म)

0,123,

यदि आप लाइब्रेरी कोड को बदलना नहीं चाहते हैं तो आपको शायद python3 का उपयोग करना होगा।

+0

धन्यवाद, मुझे यह उल्लेख करना चाहिए था कि मैंने पहले ही यह माना है कि (मूल प्रश्न में जोड़ दिया जाएगा), पिम्प्लर प्रलेखन में कहा गया है कि "पाइम्प्लर पूरी तरह से पाइथन में लिखा जाता है, बाहरी पुस्तकालयों के लिए कोई निर्भरता नहीं है। इसका परीक्षण पायथन के साथ किया गया है लिनक्स, विंडोज और मैकोज़ एक्स पर 2.5, 2.6, 2.7, 3.1, 3.2, 3.3, 3.4। " – Darina

2

यह पांडा पुस्तकालय में एक समस्या प्रतीत होता है। मैंने इसे लाइब्रेरी कोड संपादित करके हल किया। त्रुटि का ट्रैक आप को इंगित करता है जो लाइन गलत है:

File "/usr/local/lib/python2.7/dist-packages/pandas/core/base.py", line 130, in __sizeof__ 
return super(self, PandasObject).__sizeof__() 

आप सिर्फ इस तरह मापदंडों का क्रम बदलने के लिए है:

return super(PandasObject, self).__sizeof__() 

मैंने किया और मैं सामान्य रूप से चलाने के लिए सक्षम था मेरे कार्यक्रम।

संबंधित मुद्दे