2010-01-06 9 views
8
import itertools 
print itertools#ok 

कोड ठीकजहां 'itertools' फ़ाइल

है, लेकिन मैं itertools फ़ाइल नहीं मिल सकता है।

जो मुझे बता सकते हैं जहां 'itertools फ़ाइल' python2.5


मेरी कोड चलता है है

import itertools 
print itertools.__file__ 


Traceback (most recent call last): 
    File "D:\zjm_code\mysite\zjmbooks\a.py", line 5, in <module> 
    print itertools.__file__ 
AttributeError: 'module' object has no attribute '__file__' 

उत्तर

17
>>> import itertools 
>>> itertools.__file__ 
'/usr/lib64/python2.6/lib-dynload/itertools.so' 

तथ्य यह है कि फ़ाइल नाम .so साथ समाप्त होता है मतलब है कि यह एक विस्तार मॉड्यूल सी (बजाय एक सामान्य पायथन मॉड्यूल) में लिखा है। यदि आप स्रोत कोड को देखना चाहते हैं, तो पायथन स्रोत डाउनलोड करें और Modules/itertoolsmodule.c पर देखें (आप इसे अपने ब्राउज़र में http://svn.python.org/view/python/trunk/Modules/itertoolsmodule.c?view=log पर भी देख सकते हैं)।

संपादित करें (नीचे के रूप में टिप्पणी का उत्तर): यह भी अजगर 2.5 के साथ काम करता है:

Python 2.5.2 (r252:60911, Oct 5 2008, 19:29:17) 
[GCC 4.3.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import itertools 
>>> itertools.__file__ 
'/usr/lib/python2.5/lib-dynload/itertools.so' 
+0

धन्यवाद, pitrou, मुझे लगता है कि आप python2 में सही हैं।6, लेकिन मेरा कोड पाइथन 2.5 में त्रुटि चलाता है, इसमें '__file__' नामक विशेषता नहीं है – zjm1126

+0

आपका पायथन बिल्ड (संस्करण, ओएस, मूल) क्या है? शायद मॉड्यूल को गतिशील रूप से बजाए स्थिर रूप से संकलित किया गया है। लेकिन '__file__' पायथन 2.5 में भी काम करता है: ऊपर संपादित उत्तर देखें। किसी भी मामले में, ऊपर दिया गया उत्तर सही है: मॉड्यूल सी में लिखा गया है और इसका स्रोत कोड आधिकारिक पायथन स्रोत पेड़ में उपलब्ध है। –

+0

हाय एंटोनी पी मेरा सिस्टम windows_xp है, कोड जो आप मुझे त्रुटि देते हैं, मुझे नहीं पता कि क्या होता है। – zjm1126

1

इस

>>> import imp 
>>> imp.find_module("itertools") 

अद्यतन का प्रयास करें: चूंकि आपका कोई नहीं है, दूसरा मैन्युअल तरीके से जाता है। एक sys.path

>>> import sys 
>>> sys.path 
['', '/usr/lib/python2.6/lib-dynload' ] 

फिर अपने सिस्टम के आधार पर, इसे खोजने के लिए अपने सिस्टम की खोज सुविधा का उपयोग करें। मेरी Linux सिस्टम पर

$ find /usr/lib/python2.6/lib-dynload -type f -iname "*itertools*" 
/usr/lib/python2.6/lib-dynload/itertoolsmodule.so 

या, बस नाम "itertools" के साथ फ़ाइल के लिए पूरे सिस्टम को खोज करते हैं।

+0

गणन है कि यह रिटर्न (कोई नहीं, 'itertools', ('', '', 6)) – zjm1126

4

आप स्रोत फ़ाइल के लिए देख रहे हैं (सी में, निश्चित रूप से), यह उदाहरण के लिए ऑनलाइन here है।

2

Windows उपयोगकर्ताओं के लिए __file__ करने के लिए कॉल छिड़ना होगा (मैं पायथन 2.7.2, Win7x64, डिफ़ॉल्ट इंस्टॉलर पैकेज चल रहा हूँ) @ zjm1126 के रूप में उल्लेख किया गया है, मैं समस्या यह है कि itertools किया जा रहा है पर शक खिड़कियों पर अंतर्निहित है पैकेज। यदि आप कहते हैं, exceptions? आपको एक और मंच पर एक ही व्यवहार मिलेगा (उदाहरण के लिए मेरी मैकबुक पर पायथन 2.6.1) - विंडोज़ में इटारेटोल जैसे कुछ और बिल्टिन होते हैं।

यह इस तरह के रूप सख्ती से नहीं एक जवाब है, लेकिन आप sys.modules जो आप के रूप में एक संकेत देना होगा कि वह कहाँ से आ रहा है पार्स सकता है:

>>> import sys 
>>> sys.modules['itertools'] 

<module 'itertools' (built-in)> 

जो itertools अपने अजगर निष्पादन करने के लिए निर्मित किया जा रहा है इंगित करता है।

इसके अलावा, imp.find_module प्रतिक्रिया प्रदान कर रहा है एक ही जानकारी: अजीब वापसी टपल कल्पना कर रहा है (देखें: http://docs.python.org/2/library/imp.html#imp.find_module) और तुमसे कह मॉड्यूल प्रकार 6 की है, जिसके लिए imp.C_BUILTIN

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