পাইথন মডিউল উত্সগুলির অবস্থান আমি কীভাবে খুঁজে পাব?


478

প্রদত্ত পাইথন মডিউলটির উত্স ফাইলটি ইনস্টল করা আছে যেখানে আমি কীভাবে শিখব? উইন্ডোজে লিনাক্সের চেয়ে পদ্ধতিটি কি আলাদা?

আমি datetimeবিশেষত মডিউলটির উত্স সন্ধান করার চেষ্টা করছি , তবে আমি আরও সাধারণ উত্তরে আগ্রহী।

উত্তর:


375

খাঁটি পাইথন মডিউলের জন্য আপনি উত্সটি দেখে এটি সন্ধান করতে পারেন themodule.__file__। ডেটটাইম মডিউলটি অবশ্য সি-তে লিখিত এবং সুতরাং datetime.__file__একটি .so ফাইলের দিকে নির্দেশ করে ( datetime.__file__উইন্ডোজে কোনও নেই ), সুতরাং, আপনি উত্সটি দেখতে পাচ্ছেন না।

যদি আপনি একটি অজগর উত্স টার্বল ডাউনলোড করেন এবং এটি নিষ্কাশন করেন তবে মডিউলগুলির কোড মডিউলগুলির উপ-ডিরেক্টরিতে পাওয়া যাবে ।

উদাহরণস্বরূপ, আপনি অজগর ২.6 এর জন্য ডেটটাইম কোডটি সন্ধান করতে চাইলে আপনি দেখতে পারেন

Python-2.6/Modules/datetimemodule.c

আপনি https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c এ ওয়েবে সর্বশেষতম বুধবার সংস্করণটিও পেতে পারেন


যদি আপনি এই তারিখের সময়টি নির্দেশ করে আপনার উত্তরটি সম্পাদনা করেন __ ফাইল__ লিনাক্স এবং ম্যাক ওএস এক্সে একটি .so দিকে নির্দেশ করে (যদিও উইন্ডোজে ডেটটাইম মডিউল অবজেক্টটির কোনও ফাইল বৈশিষ্ট্য নেই) তবে আমি আপনার উত্তরটি গ্রহণ করব।
ড্যারিল স্পিজিটর

আসলে উইন্ডোজে (কমপক্ষে আমি যে সংস্করণটি ব্যবহার করছি), ডেটটাইমটিতে কেবল কোনও ফাইলের বৈশিষ্ট্য নেই।
ড্যারিল স্পিজিটর

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
শান্ত! ইন্টারেক্টিভ মোডে এটি সুনির্দিষ্ট lib কোথা থেকে এসেছে তা দেখার পরে আপনি নিজের নির্দিষ্ট আমদানির বিবৃতিটি টাইপ করতে পারেন।
স্কর্পডিয়ডগ

3
built-inমডিউলগুলি কোথায় ?
loretoparisi

120

আমি বুঝতে পারি যে এই উত্তরটি 4 বছর দেরীতে, তবে বিদ্যমান উত্তরগুলি হ'ল লোককে বিভ্রান্ত করছে।

এটি করার সঠিক উপায়টি কখনই নয় __file__, বা sys.pathনিজের উপর দিয়ে হেঁটে যাওয়ার চেষ্টা করা ইত্যাদি ((যদি আপনার ২.১ এর বাইরেও পশ্চাদপটে সামঞ্জস্যের প্রয়োজন না হয়)।

এটি inspectমডিউল particular বিশেষত, getfileবা getsourcefile

যদি না আপনি ফাইলগুলি ম্যাপিংয়ের .pycজন্য নিয়মগুলি (যা নথিভুক্ত তবে বেদনাদায়ক, সিপিথন ২.x এর জন্য, এবং অন্যান্য বাস্তবায়নের জন্য ডকুমেন্টেড নয়, বা 3.x) শিখতে এবং প্রয়োগ করতে চান না .py; .zip সংরক্ষণাগার, ডিম এবং মডিউল প্যাকেজগুলি নিয়ে কাজ করে; সমর্থন করে না এমন ফাইলগুলি .so/ .pydফাইলগুলিতে যাওয়ার জন্য বিভিন্ন উপায়ে চেষ্টা করা __file__; জাইথন ​​/ আয়রন পাইথন / পিপাই কী করে তা নির্ধারণ করা; ইত্যাদি ক্ষেত্রে এটি জন্য যান।

ইতোমধ্যে, 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তাই, তাই ডেটটাইমডিউড.২ আপনি যা চান তা অনুমান করা কঠিন হবে না।


3
কেন __file__অন্তর্নির্মিতদের জন্য প্রযোজ্য নয়? আমি বুঝতে পারি যেখানে ক্রলিংয়ের sys.path বেদনাদায়ক হতে পারে (বিশেষত মেটা_পাথ সম্পর্কে না জেনে), তবে __file__সংজ্ঞা এবং বাইনারিগুলির মধ্যে নাম স্পেস সম্পর্কে আপনার উদ্বেগ কি?

1
আমি তারিখের সময় ২.7.৮ এ এটি করি এবং গেটফিল এবং গেটসোফাইল উভয়ের জন্যই টাইপ-এরির পাই। ব্যক্তিগতভাবে আমার কাছে পাইথনের একাধিক সংস্করণ ইনস্টল করা আছে এবং
ডেটটাইমডিউল মাইক্রোসফটটির কোন

1
@ মিমিটচেল: আপনি যদি ইন্সপেক্ট.জেটফাইলে (ডেটটাইম) থেকে টাইপআরার পেয়ে থাকেন তবে ধরে নেওয়া যে ডেটটাইম আসলে মডিউল এবং আপনি একই নামে অর্পিত অন্য কোনও কিছু নয় তবে আমি নিশ্চিত যে এর অর্থ আপনি একটি কাস্টম বিল্ড তৈরি করেছেন স্থায়ীভাবে তারিখের সময়টিকে একটি লোডযোগ্য মডিউল তৈরির পরিবর্তে দোভাষীর সাথে যুক্ত করুন। তবে অন্যান্য কারণও থাকতে পারে যা আমি ভেবে দেখিনি। আপনাকে একটি নতুন প্রশ্ন জিজ্ঞাসা করতে হবে, এবং এটি পুনরুত্পাদন করার জন্য আরও অনেক তথ্য দিতে হবে।
abarnert

@ মিমিটচেল: এদিকে, ডেটটাইমডিউল.সি. এর কোন সংস্করণটি এটি নির্দেশ করছে, তা খুঁজে বের করার কোনও উপায় নেই, কারণ এটি ডেটটাইমডিউডল সিটিতে নির্দেশ করছে না, এটি সেই সি ফাইল থেকে নির্মিত একটি সংকলিত মডিউলটির দিকে ইঙ্গিত করছে; সি ফাইলটি আপনার সিস্টেমে উপস্থিত নাও থাকতে পারে, আপনি যা-ই হোক না কেন এটি সংকলন করার পরে সম্পাদনা করা হতে পারে।
২৩:৩৮ এপার্নার্ট

@ ত্রিস্তান: আমি নিশ্চিত নই যে আপনি যা জিজ্ঞাসা করছেন আমি তা বুঝতে পেরেছি, তবে সম্ভবত এটির উত্তর দেবে: যখনই __file__কাজ করে, inspect.getfileকাজ করে; কোনও পরিস্থিতি নেই যেখানে অনুমান __file__করা কেবলমাত্র পরিদর্শন মডিউলটি ব্যবহার করার চেয়ে ভাল হবে কিনা তা অনুমান করা ।
abarnert

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)'ইন্টারেক্টিভ অজগরের মধ্যে না ফেলেই আপনাকে এটি দেখতে দেবে।
জো ব্লক 3

6
পাইথন 3:python -c 'import sys; print("\n".join(sys.path))'
আরুডজিনস্কা

60

আপনি যদি আপনার মডিউলগুলি ইনস্টল করতে পাইপ ব্যবহার করেন তবে কেবলমাত্র 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ডেটাডগ করছি এবং এখনও এটি আমদানি করতে পারি। অন্যান্য সমাধানগুলি যখন সহায়তা না করে তখন ফাইলগুলি কোথায় ছিল (তাই আমি সেগুলি মুছতে পারি) এটি আমাকে সহায়তা করেছিল।
ছাগ

পাইথন ৩.এক্স-এর জন্য, impপ্যাকেজটি ( 3..৪ সংস্করণ importlibথেকে) ডকস.পিথন.অর্গ
মাইকেল ২

পাইথন 3 এর জন্য এখন আপনাকে এটি ব্যবহার করতে হবে। 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

উইন্ডোজে আপনি পাইথন মডিউলটির অবস্থান নীচের মত দেখতে পাবেন: যেমন বিশ্রাম_ ফ্রেমওয়ার্ক মডিউলটি সন্ধান করুন এখানে চিত্র বর্ণনা লিখুন


4

উবুন্টু 12.04-তে, উদাহরণস্বরূপ পাইথন 2-এর জন্য নম্পি প্যাকেজটি এখানে পাওয়া যাবে:

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

অবশ্যই, এটি জেনেরিক উত্তর নয়


0

সমস্ত পাইথন মডিউল পাইথনে লেখা হয় না। ডেটটাইম তাদের মধ্যে একটি হতে পারে যা তা নয় এবং (লিনাক্সে) ডেটটাইম.এসও হয়।

পাইথন স্ট্যান্ডার্ড লাইব্রেরীতে এটি পেতে আপনার উত্স কোডটি ডাউনলোড করতে হবে।


2
ড্যারিল: আপনি জিমের উত্তরটি ভুলভাবে ভাগ করেছেন, "ডেটটাইমটি পাইথনটিতে লিখিত নয় অজগর মডিউলগুলির মধ্যে একটি হতে পারে"।
ম্যাথু ট্র্যাভর 0

0

যারা জিইউআই সমাধান পছন্দ করেন তাদের জন্য: আপনি যদি স্পাইডার (অ্যানাকোন্ডা ইনস্টলেশনের অংশ) এর মতো কোনও গুই ব্যবহার করেন তবে আপনি মডিউলটির নামটিতে ডান ক্লিক করতে পারেন (যেমন "আমদানি সিএসভি" তে "সিএসভি") এবং "গো" নির্বাচন করতে পারেন সংজ্ঞাতে "- এটি ফাইলটি খুলবে, তবে উপরের অংশেও সঠিক ফাইল অবস্থানটি দেখতে পাবেন (" সি: .... সিএসভি.পি ")


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

টার্মিনাল থেকে আপনার একাধিক পাইথন সংস্করণ ইনস্টল রয়েছে কিনা তা যাচাই করার আরও একটি উপায়।

-এমবিপি: ~ পাইথন 3-মি পিপ শো পাইপার্ক্লিপ

অবস্থান: / লাইব্রেরি / ফ্রেমওয়ার্কস / পাইথন.ফ্রেমওয়ার্ক / ভার্সন / .7.//lib/python3.7/site-

এমবিপি: ~ পাইথন-মি পাইপ শো পাইপক্র্লিপ

অবস্থান: / ব্যবহারকারীর / গণেশভুয়্যুর / লাইব্রেরি / পাইথন / 2.7/lib/python/site-packages


-1

স্পাইডারের মতো আইডিইতে মডিউলটি আমদানি করুন এবং তারপরে পৃথকভাবে মডিউলটি চালান। এখানে চিত্র বর্ণনা লিখুন


str()মডেলটির আমদানি এবং মুদ্রণ হ'ল আপনি স্ক্রিনশটে যা করছেন তার একটি আরও সঠিক বিবরণ, আইডিই এই সমাধানের জন্য অপ্রাসঙ্গিক বলে মনে হচ্ছে
মাউসটেল

2
স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম! ছবি ব্যবহার করে কোড পোস্ট করবেন না দয়া করে। চিত্রগুলি পড়া শক্ত, অনুসন্ধান করা যায় না এবং কিছু পাঠকের কাছে দেখা যায় না। পরিবর্তে, দয়া করে আপনার উত্তরের মুখ্য অংশে সরাসরি কোনও প্রাসঙ্গিক কোড অন্তর্ভুক্ত করুন।
ব্রায়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.