पायथन मॉड्यूल स्रोतों का स्थान मुझे कैसे पता चलेगा?


478

मुझे कैसे पता चलेगा कि किसी दिए गए पायथन मॉड्यूल के लिए स्रोत फ़ाइल कहाँ स्थापित है? क्या लिनक्स की तुलना में विंडोज पर विधि अलग है?

मैं datetimeविशेष रूप से मॉड्यूल के स्रोत को देखने की कोशिश कर रहा हूं , लेकिन मैं एक और सामान्य उत्तर में भी दिलचस्पी रखता हूं।

जवाबों:


375

एक शुद्ध अजगर मॉड्यूल के लिए आप स्रोत को देखकर पा सकते हैं themodule.__file__। डेटाइम मॉड्यूल, हालांकि, C में लिखा गया है, और इसलिए datetime.__file__एक .so फ़ाइल ( datetime.__file__विंडोज पर कोई नहीं है) की ओर इशारा करता है , और इसलिए, आप स्रोत को नहीं देख सकते हैं।

यदि आप एक पायथन स्रोत टारबॉल डाउनलोड करते हैं और इसे निकालते हैं, तो मॉड्यूल का कोड मॉड्यूल उपनिर्देशिका में पाया जा सकता है ।

उदाहरण के लिए, यदि आप अजगर 2.6 के लिए डेटाटाइम कोड ढूंढना चाहते हैं, तो आप देख सकते हैं

Python-2.6/Modules/datetimemodule.c

आप वेब पर नवीनतम मर्क्यूरियल संस्करण https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c पर भी देख सकते हैं


यदि आप उस डेटाटाइम को इंगित करने के लिए अपना उत्तर संपादित करते हैं। लिनक्स और मैक ओएस एक्स पर .so के लिए .__ file__ अंक (हालांकि विंडोज पर डेटाटाइम मॉड्यूल ऑब्जेक्ट की कोई फ़ाइल विशेषता नहीं है), मैं आपके उत्तर को स्वीकार करूंगा।
डेरिल स्पिट्जर

वास्तव में विंडोज पर (कम से कम जिस संस्करण का मैं उपयोग कर रहा हूं), डेटाइम में केवल एक फ़ाइल विशेषता नहीं है ।
डेरिल स्पिट्जर

220

रनिंग python -vकमांड लाइन से आपको बता क्या आयात किया जा रहा है और जहां से करना चाहिए। यह मेरे लिए विंडोज और मैक ओएस एक्स पर काम करता है।

C:\>python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:\Python24\lib\site.pyc has bad mtime
import site # from C:\Python24\lib\site.py
# wrote C:\Python24\lib\site.pyc
# C:\Python24\lib\os.pyc has bad mtime
import os # from C:\Python24\lib\os.py
# wrote C:\Python24\lib\os.pyc
import nt # builtin
# C:\Python24\lib\ntpath.pyc has bad mtime
...

मुझे यकीन नहीं है कि उन बुरे माइम मेरे इंस्टॉल पर क्या हैं!


8
ठंडा! आप इंटरेक्टिव मोड में खुलने के बाद अपने विशिष्ट आयात स्टेटमेंट में भी टाइप कर सकते हैं, यह देखने के लिए कि विशिष्ट लिबर कहां से आता है।
स्कॉर्पियोडावॉग

3
built-inमॉड्यूल कहाँ हैं ?
लोरेटोपरसी

120

मुझे लगता है कि यह जवाब 4 साल की देर से है, लेकिन मौजूदा जवाब लोगों को गुमराह कर रहे हैं।

ऐसा करने का सही तरीका कभी नहीं है __file__, या sys.pathखुद के माध्यम से चलने और खोज करने की कोशिश कर रहा है , आदि (जब तक आपको 2.1 से परे पिछड़े संगत होने की आवश्यकता नहीं है)।

यह inspectमॉड्यूल है - विशेष रूप से, getfileया getsourcefile

जब तक आप नियमों को सीखना और लागू नहीं करना चाहते हैं (जो कि दस्तावेज हैं, लेकिन दर्दनाक है, CPython 2.x के लिए, और अन्य कार्यान्वयन के लिए बिल्कुल भी प्रलेखित नहीं है, या 3.x) फ़ाइलों की मैपिंग के .pycलिए .py; .zip अभिलेखागार, अंडे और मॉड्यूल पैकेज के साथ काम करना; रास्ते .so/ .pydफ़ाइलों को प्राप्त करने के लिए विभिन्न तरीकों की कोशिश करना जो समर्थन नहीं करते हैं __file__; Jython / IronPython / PyPy क्या करते हैं; आदि किस मामले में, इसके लिए जाएं।

इस बीच, 2.0+ से प्रत्येक पायथन संस्करण का स्रोत ऑनलाइन http://hg.python.org/cpython/file/X.Y/(जैसे, 2.7 या 3.3 ) पर उपलब्ध है। इसलिए, एक बार जब आपको पता चलता है कि inspect.getfile(datetime)यह एक .soया .pydफ़ाइल की तरह है /usr/local/lib/python2.7/lib-dynload/datetime.so, तो आप इसे मॉड्यूल निर्देशिका के अंदर देख सकते हैं। कड़ाई से बोलते हुए, यह सुनिश्चित करने का कोई तरीका नहीं है कि कौन सी फ़ाइल किस मॉड्यूल को परिभाषित करती है, लेकिन उनमें से लगभग सभी foo.cया तो हैं foomodule.c, इसलिए यह अनुमान लगाना कठिन नहीं होना चाहिए कि datetimemodule.c क्या आप चाहते हैं।


3
__file__गैर-निर्माण के लिए लागू क्यों नहीं है? मैं समझता हूं कि रेंगते हुए sys.path दर्दनाक हो सकता है (विशेष रूप से मेटा_पैथ के बारे में जाने बिना), लेकिन क्या आपकी चिंता __file__परिभाषाओं और बायनेरिज़ के बीच नामकरण के बारे में है ?

1
मैं इसे 2.7.8 में डेटाइम पर करता हूं और गेटफाइल और गेटसोर्सफाइल दोनों के लिए टाइप टाइप हो जाता हूं। व्यक्तिगत तौर पर मैं स्थापित अजगर के कई संस्करण है और मैं, पता करने के लिए datetimemodule.c का कौन सा संस्करण यह की दिशा में रखे है की जरूरत है, क्योंकि अभी मैं जानता हूँ कि यह एक यह चल रहा है कि दुभाषिया संस्करण दिया की दिशा में रखे जाना चाहिए की दिशा में रखे नहीं है ...
mmitchell

1
@mmitchell: यदि आपको इंस्पेक्टर.गेटफाइल (डेटाइम) से टाइपर्रर मिल रहा है, तो मान लें कि डेटटाइम वास्तव में मॉड्यूल है और कुछ और नहीं जिसे आपने उसी नाम को सौंपा है, मुझे पूरा यकीन है कि आपने कस्टम बिल्ड बनाया है एक लोड करने योग्य मॉड्यूल बनाने के बजाए दुभाषिया को सांख्यिकीय रूप से लिंक करना। लेकिन अन्य कारण हो सकते हैं जिनके बारे में मैंने नहीं सोचा था। आपको एक नया प्रश्न पूछने की आवश्यकता है, और इसे पुन: पेश करने के लिए बहुत अधिक जानकारी दें।
अपराह्न

@mmitchell: इस बीच, यह पता लगाने का कोई तरीका नहीं है कि datetimemodule.c के किस संस्करण पर यह इंगित कर रहा है, क्योंकि यह datetimemodule.c पर इंगित नहीं कर रहा है, यह उस C फ़ाइल से निर्मित संकलित मॉड्यूल पर इंगित कर रहा है; आपके सिस्टम पर C फ़ाइल मौजूद नहीं हो सकती है, आप इसे संकलित करने के बाद से संपादित कर सकते हैं, जो भी हो।
अपराह्न

@tristan: मुझे यकीन नहीं है कि मैं समझता हूँ कि आप क्या पूछ रहे हैं, लेकिन शायद यह इसका जवाब देगा: जब भी __file__काम करता है, inspect.getfileकाम करता है; ऐसी कोई स्थिति नहीं है जहां यह अनुमान लगाना है कि क्या __file__केवल निरीक्षण मॉड्यूल का उपयोग करने से बेहतर होगा।

67

sys.pathसूची निर्देशिका जो रनटाइम पर मॉड्यूल के लिए खोज की जाएगी की सूची में शामिल हैं:

python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]

10
python -c 'import sys; print "\n".join(sys.path)'इंटरैक्टिव अजगर में ड्रॉप करने के लिए बिना इसे देखने देगा।
जो ब्लॉक

6
पायथन 3:python -c 'import sys; print("\n".join(sys.path))'
अरुद्ज़िंस्का

61

यदि आप अपने मॉड्यूल को स्थापित करने के लिए पाइप का उपयोग कर रहे हैं, तो बस pip show $moduleस्थान वापस आ गया है।


10
(मुझे लगता है कि $moduleएक प्लेसहोल्डर चर, एक टाइप करेंगे सचमुच क्या नहीं के रूप में मतलब था जैसे,। m=numpy; pip show $m... आदि, किसी के लिए m)
माइकल

यह पूछे जाने वाले प्रश्न के लिए सबसे सटीक उत्तर के रूप में चिह्नित किया जाना चाहिए।
राहुल गोयल

37

मानक लाइब्रेरी से imp.find_module आज़माएं

>>> import imp
>>> imp.find_module('fontTools')
(None, 'C:\\Python27\\lib\\site-packages\\FontTools\\fontTools', ('', '', 5))
>>> imp.find_module('datetime')
(None, 'datetime', ('', '', 6))

1
यह शानदार है। मैं apt-get removeडेटाडॉग कर सकता हूं और फिर भी इसे आयात कर सकता हूं। इससे मुझे यह पता लगाने में मदद मिली कि फ़ाइलें कहाँ थीं (इसलिए मैं उन्हें हटा सकता था) जब अन्य समाधान मदद नहीं करते थे।
sg

python3.x के लिए, impपैकेज को importlib(3.1 के बाद से संस्करण 3.4 के बाद से) (3.1 के बाद से) docs.python.org/3.6/library/imp.html
michael

अब आपको इसे python3 के लिए इस तरह से उपयोग करने की आवश्यकता है। import importlibतत्पश्चात १ .importlib.util.find_spec('fontTools')
५२

33

datetime एक अंतर्निहित मॉड्यूल है, इसलिए कोई (पायथन) स्रोत फ़ाइल नहीं है।

फ़ाइलों .py(या .pyc) से आने वाले मॉड्यूल के लिए , आप उपयोग कर सकते हैं mymodule.__file__, जैसे

> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'

12

अजगर दुभाषिया में आप विशेष मॉड्यूल आयात कर सकते हैं और फिर मदद (मॉड्यूल) टाइप कर सकते हैं। यह नाम, फ़ाइल, मॉड्यूल डॉक्स, विवरण एट अल जैसे विवरण देता है।

उदाहरण के लिए:

import os

help(os)


Help on module os:

NAME

os - OS routines for Mac, NT, or Posix depending on what system we're on.

FILE

/usr/lib/python2.6/os.py

MODULE DOCS

http://docs.python.org/library/os

DESCRIPTION

This exports:

- all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc.

- os.path is one of the modules posixpath, or ntpath

- os.name is 'posix', 'nt', 'os2', 'ce' or 'riscos'

और अन्य


इसने मुझे मॉड्यूल फ़ाइल के लिए एक पूर्ण पथ दिया, जबकि अन्य उत्तरों ने केवल सापेक्ष पथ दिए। धन्यवाद।
जेरेट

12

यहां एक मॉड्यूल के लिए फ़ाइल नाम प्राप्त करने के लिए एक-लाइनर है, शेल अलियासिंग के लिए उपयुक्त:

echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - 

उपनाम के रूप में सेट करें:

alias getpmpath="echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - "

काम में लाना:

$ getpmpath twisted
/usr/lib64/python2.6/site-packages/twisted/__init__.pyc
$ getpmpath twisted.web
/usr/lib64/python2.6/site-packages/twisted/web/__init__.pyc


9

संकेतित पायथन मॉड्यूल के लिए स्रोत युक्त निर्देशिका से सीडी के लिए इस निफ्टी "सीडीपी" कमांड को देखें:

cdp () {
  cd "$(python -c "import os.path as _, ${1}; \
    print _.dirname(_.realpath(${1}.__file__[:-1]))"
  )"
}

धन्यवाद! यह वही है जो मैं देख रहा था। अजीब तरह से वे अजगर डिस्ट्रो में इस तरह का कुछ शामिल नहीं करेंगे।
एंटनी हैचकिंस

9

खिड़कियों पर आप नीचे दिखाए गए अनुसार अजगर मॉड्यूल का स्थान पा सकते हैं: अर्थात rest_framework मॉड्यूल खोजें यहाँ छवि विवरण दर्ज करें


4

उबंटू 12.04 पर, उदाहरण के लिए python2 के लिए संख्यात्मक पैकेज, निम्न पर पाया जा सकता है:

/usr/lib/python2.7/dist-packages/numpy

बेशक, यह सामान्य जवाब नहीं है


0

अजगर में सभी अजगर मॉड्यूल नहीं लिखे गए हैं। डेटटाइम उनमें से एक होता है जो नहीं है, और (लिनक्स पर) डेटटाइम है।

आपको इसे प्राप्त करने के लिए पायथन मानक लाइब्रेरी के लिए स्रोत कोड डाउनलोड करना होगा।


2
डेरिल: आपने जिम के जवाब को गलत बताया, "डेटाइम एक अजगर मॉड्यूल में से एक होता है जिसे अजगर में नहीं लिखा जाता है"।
मैथ्यू ट्रेवर

0

उन लोगों के लिए जो GUI समाधान पसंद करते हैं: यदि आप एक gui जैसे कि स्पाइडर (एनाकोंडा इंस्टॉलेशन का हिस्सा) का उपयोग कर रहे हैं, तो आप मॉड्यूल नाम (जैसे कि "csv" को "import csv") में राइट-क्लिक कर सकते हैं और "go" चुनें परिभाषा के लिए "- यह फ़ाइल खोलेगा, लेकिन शीर्ष पर भी आप सटीक फ़ाइल स्थान (" C: .... csv.py ") देख सकते हैं


0

यदि आप दुभाषिया का उपयोग नहीं कर रहे हैं तो आप नीचे दिए गए कोड चला सकते हैं:

import site
print (site.getsitepackages())

आउटपुट:

['C:\\Users\\<your username>\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\<your username>\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages']

एरे में दूसरा तत्व आपका पैकेज स्थान होगा। इस मामले में:

C:\Users\<your username>\AppData\Local\Programs\Python\Python37\lib\site-packages

0

यह देखने का एक और तरीका है कि क्या आपके पास टर्मिनल से कई अजगर संस्करण स्थापित हैं।

-एमपीपी: ~ python3 -m pip शो पाइपरलिप

स्थान: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-

एमबीपी: ~ पायथन-एम पिप शो पीपरलिप

स्थान: /Users/umeshvuyyuru/Library/Python/2.7/lib/python/site-packages


-1

स्पाइडर जैसे आईडीई में, मॉड्यूल आयात करें और फिर मॉड्यूल को व्यक्तिगत रूप से चलाएं। यहां छवि विवरण दर्ज करें


str()मॉडल का आयात और प्रिंट करना एक अधिक सटीक वर्णन है कि आप स्क्रीनशॉट में क्या कर रहे हैं, साथ ही आईडीई इस समाधान के लिए अप्रासंगिक लगता है
मूसटेल

2
StackOverflow में आपका स्वागत है! कृपया छवियों का उपयोग करके कोड पोस्ट न करें। चित्र पढ़ने में कठिन हैं, खोजे नहीं जा सकते हैं और कुछ पाठकों के लिए देखने योग्य नहीं हैं। इसके बजाय, कृपया अपने जवाब के शरीर में किसी भी प्रासंगिक कोड को सीधे शामिल करें।
ब्रायन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.