প্রদত্ত পাইথন মডিউলটির উত্স ফাইলটি ইনস্টল করা আছে যেখানে আমি কীভাবে শিখব? উইন্ডোজে লিনাক্সের চেয়ে পদ্ধতিটি কি আলাদা?
আমি datetimeবিশেষত মডিউলটির উত্স সন্ধান করার চেষ্টা করছি , তবে আমি আরও সাধারণ উত্তরে আগ্রহী।
প্রদত্ত পাইথন মডিউলটির উত্স ফাইলটি ইনস্টল করা আছে যেখানে আমি কীভাবে শিখব? উইন্ডোজে লিনাক্সের চেয়ে পদ্ধতিটি কি আলাদা?
আমি datetimeবিশেষত মডিউলটির উত্স সন্ধান করার চেষ্টা করছি , তবে আমি আরও সাধারণ উত্তরে আগ্রহী।
উত্তর:
খাঁটি পাইথন মডিউলের জন্য আপনি উত্সটি দেখে এটি সন্ধান করতে পারেন themodule.__file__। ডেটটাইম মডিউলটি অবশ্য সি-তে লিখিত এবং সুতরাং datetime.__file__একটি .so ফাইলের দিকে নির্দেশ করে ( datetime.__file__উইন্ডোজে কোনও নেই ), সুতরাং, আপনি উত্সটি দেখতে পাচ্ছেন না।
যদি আপনি একটি অজগর উত্স টার্বল ডাউনলোড করেন এবং এটি নিষ্কাশন করেন তবে মডিউলগুলির কোড মডিউলগুলির উপ-ডিরেক্টরিতে পাওয়া যাবে ।
উদাহরণস্বরূপ, আপনি অজগর ২.6 এর জন্য ডেটটাইম কোডটি সন্ধান করতে চাইলে আপনি দেখতে পারেন
Python-2.6/Modules/datetimemodule.c
আপনি https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c এ ওয়েবে সর্বশেষতম বুধবার সংস্করণটিও পেতে পারেন
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
...
আমি নিশ্চিত না যে আমার খারাপ ইনস্টলটিতে খারাপ মাইটাইমগুলি কী!
built-inমডিউলগুলি কোথায় ?
আমি বুঝতে পারি যে এই উত্তরটি 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তাই, তাই ডেটটাইমডিউড.২ আপনি যা চান তা অনুমান করা কঠিন হবে না।
__file__অন্তর্নির্মিতদের জন্য প্রযোজ্য নয়? আমি বুঝতে পারি যেখানে ক্রলিংয়ের sys.path বেদনাদায়ক হতে পারে (বিশেষত মেটা_পাথ সম্পর্কে না জেনে), তবে __file__সংজ্ঞা এবং বাইনারিগুলির মধ্যে নাম স্পেস সম্পর্কে আপনার উদ্বেগ কি?
__file__কাজ করে, inspect.getfileকাজ করে; কোনও পরিস্থিতি নেই যেখানে অনুমান __file__করা কেবলমাত্র পরিদর্শন মডিউলটি ব্যবহার করার চেয়ে ভাল হবে কিনা তা অনুমান করা ।
sys.pathতালিকা ডিরেক্টরি যা রানটাইম এ মডিউল অনুসন্ধান করা হবে সেগুলির তালিকা রয়েছে:
python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]
python -c 'import sys; print "\n".join(sys.path)'ইন্টারেক্টিভ অজগরের মধ্যে না ফেলেই আপনাকে এটি দেখতে দেবে।
python -c 'import sys; print("\n".join(sys.path))'
আপনি যদি আপনার মডিউলগুলি ইনস্টল করতে পাইপ ব্যবহার করেন তবে কেবলমাত্র pip show $moduleঅবস্থানটি ফিরে আসবে।
$moduleএকটি স্থানধারক পরিবর্তনশীল হিসাবে বোঝানো হয়েছিল, আক্ষরিকভাবে কোনওটি কী টাইপ করবে তা নয়। যেমন, m=numpy; pip show $m... ইত্যাদি, যে m
স্ট্যান্ডার্ড লাইব্রেরি থেকে 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))
apt-get removeডেটাডগ করছি এবং এখনও এটি আমদানি করতে পারি। অন্যান্য সমাধানগুলি যখন সহায়তা না করে তখন ফাইলগুলি কোথায় ছিল (তাই আমি সেগুলি মুছতে পারি) এটি আমাকে সহায়তা করেছিল।
import importlibতারপরেimportlib.util.find_spec('fontTools')
datetime একটি অন্তর্নির্মিত মডিউল, সুতরাং কোনও পাইথন উত্স ফাইল নেই।
.py(বা .pyc) ফাইল থেকে আগত মডিউলগুলির জন্য , আপনি ব্যবহার করতে পারেন mymodule.__file__, যেমন
> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'
পাইথন ইন্টারপ্রেটারে আপনি নির্দিষ্ট মডিউলটি আমদানি করতে পারেন এবং তারপরে সহায়তা (মডিউল) টাইপ করতে পারেন। এটি নাম, ফাইল, মডিউল ডক্স, বিবরণ এবং অন্যান্য হিসাবে বিশদ দেয়।
উদা:
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'
ইত্যাদি
শেল আলিয়াসিংয়ের জন্য উপযুক্ত একটি মডিউলটির ফাইলের নাম পেতে এখানে একটি ওয়ান-লাইনার রয়েছে:
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
নিউ পাইথন 3.2, আপনি এখন যেমন ব্যবহার করতে পারেন code_info()অপ মডিউল থেকে:
http://docs.python.org/dev/whatsnew/3.2.html#dis
নির্দেশিত পাইথন মডিউলটির জন্য উত্স সম্বলিত ডিরেক্টরিটিতে সিডি করতে এই নিফটি "সিডিপি" কমান্ডটি দেখুন :
cdp () {
cd "$(python -c "import os.path as _, ${1}; \
print _.dirname(_.realpath(${1}.__file__[:-1]))"
)"
}
সমস্ত পাইথন মডিউল পাইথনে লেখা হয় না। ডেটটাইম তাদের মধ্যে একটি হতে পারে যা তা নয় এবং (লিনাক্সে) ডেটটাইম.এসও হয়।
পাইথন স্ট্যান্ডার্ড লাইব্রেরীতে এটি পেতে আপনার উত্স কোডটি ডাউনলোড করতে হবে।
যারা জিইউআই সমাধান পছন্দ করেন তাদের জন্য: আপনি যদি স্পাইডার (অ্যানাকোন্ডা ইনস্টলেশনের অংশ) এর মতো কোনও গুই ব্যবহার করেন তবে আপনি মডিউলটির নামটিতে ডান ক্লিক করতে পারেন (যেমন "আমদানি সিএসভি" তে "সিএসভি") এবং "গো" নির্বাচন করতে পারেন সংজ্ঞাতে "- এটি ফাইলটি খুলবে, তবে উপরের অংশেও সঠিক ফাইল অবস্থানটি দেখতে পাবেন (" সি: .... সিএসভি.পি ")
আপনি যদি দোভাষী ব্যবহার না করে থাকেন তবে নীচের কোডটি চালাতে পারেন:
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
টার্মিনাল থেকে আপনার একাধিক পাইথন সংস্করণ ইনস্টল রয়েছে কিনা তা যাচাই করার আরও একটি উপায়।
-এমবিপি: ~ পাইথন 3-মি পিপ শো পাইপার্ক্লিপ
অবস্থান: / লাইব্রেরি / ফ্রেমওয়ার্কস / পাইথন.ফ্রেমওয়ার্ক / ভার্সন / .7.//lib/python3.7/site-
এমবিপি: ~ পাইথন-মি পাইপ শো পাইপক্র্লিপ
অবস্থান: / ব্যবহারকারীর / গণেশভুয়্যুর / লাইব্রেরি / পাইথন / 2.7/lib/python/site-packages
স্পাইডারের মতো আইডিইতে মডিউলটি আমদানি করুন এবং তারপরে পৃথকভাবে মডিউলটি চালান। এখানে চিত্র বর্ণনা লিখুন
str()মডেলটির আমদানি এবং মুদ্রণ হ'ল আপনি স্ক্রিনশটে যা করছেন তার একটি আরও সঠিক বিবরণ, আইডিই এই সমাধানের জন্য অপ্রাসঙ্গিক বলে মনে হচ্ছে