উত্তর:
দুটি ধরণের সাইট-প্যাকেজ ডিরেক্টরি রয়েছে, বৈশ্বিক এবং প্রতি ব্যবহারকারী ।
গ্লোবাল সাইট-প্যাকেজ (" ডিস্ট-প্যাকেজগুলি ") ডিরেক্টরিগুলি sys.path
আপনি চালানোর সময় তালিকাভুক্ত করা হয় :
python -m site
পাইথন কোডের সাইট মডিউলgetsitepackages
থেকে আরও সংক্ষিপ্ত তালিকার জন্য :
python -c 'import site; print(site.getsitepackages())'
দ্রষ্টব্য: ভার্চুয়ালনেভসের সাথে গেটিপ্যাকেজগুলি উপলভ্য নয় , sys.path
উপরে থেকে ভ্যুচুয়ালেভের সাইট-প্যাকেজ ডিরেক্টরি সঠিকভাবে তালিকাভুক্ত করা হবে। পাইথন 3 এ, আপনি পরিবর্তে সিসকনফিগ মডিউলটি ব্যবহার করতে পারেন :
python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])'
ব্যবহারকারী প্রতি সাইট-প্যাকেজ ডিরেক্টরি ( PEP 370 ) যেখানে পাইথন আপনার স্থানীয় প্যাকেজ ইনস্টল হল:
python -m site --user-site
যদি এটি কোনও অ-বিদ্যমান ডিরেক্টরিতে নির্দেশ করে তবে পাইথনের প্রস্থান স্থিতিটি পরীক্ষা করে দেখুন python -m site --help
এবং ব্যাখ্যা দেখুন।
ইঙ্গিত: চলমান pip list --user
বা pip freeze --user
আপনাকে ব্যবহারকারীর প্রতিটি সাইট-প্যাকেজ ইনস্টল করা একটি তালিকা দেয় ।
<package>.__path__
আপনাকে নির্দিষ্ট প্যাকেজের অবস্থান (গুলি) সনাক্ত করতে দেয়: ( বিশদ )
$ python -c "import setuptools as _; print(_.__path__)"
['/usr/lib/python2.7/dist-packages/setuptools']
<module>.__file__
আপনাকে একটি নির্দিষ্ট মডিউলটির অবস্থান সনাক্ত করতে দেয়: ( পার্থক্য )
$ python3 -c "import os as _; print(_.__file__)"
/usr/lib/python3.6/os.py
pip show <package>
দেবিয়ান-স্টাইলের প্যাকেজ তথ্য প্রদর্শন করতে চালান :
$ pip show pytest
Name: pytest
Version: 3.8.2
Summary: pytest: simple powerful testing with Python
Home-page: https://docs.pytest.org/en/latest/
Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others
Author-email: None
License: MIT license
Location: /home/peter/.local/lib/python3.4/site-packages
Requires: more-itertools, atomicwrites, setuptools, attrs, pathlib2, six, py, pluggy
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
(এটি পাইথন 2 এবং 3 উভয় ক্ষেত্রেও কাজ করে)।
python -c "import site; print(site.getsitepackages()[0])"
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
(অথবা সাথে প্রথম আইটেম site.getsitepackages()[0]
)
hasattr(sys,'real_prefix')
এবং তারপর heuristically সাইট প্যাকেজের নির্ধারণ থেকে [p for p in sys.path if p.endswith('site-packages')][-1]
(প্লাস পরীক্ষা যদি এক কাজ করার আগে পাওয়া যায় [-1]
।
একটি সমাধান যা:
... এই ওয়ান লাইনার:
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
পাঠযোগ্যতার জন্য ফর্ম্যাট করা (ওয়ান-লাইনার হিসাবে ব্যবহার না করে) যা দেখতে নিম্নলিখিতটির মতো:
from distutils.sysconfig import get_python_lib
print(get_python_lib())
উত্স: "কীভাবে জাঙ্গো ইনস্টল করবেন" ডকুমেন্টেশনের একটি অতি পুরানো সংস্করণ (যদিও এটি কেবল জাঙ্গো ইনস্টলেশন থেকে বেশি কার্যকর)
cdsitepackages
পরিবেশের সাইট-প্যাকেজ ডিরেক্টরিতে সরাসরি পরিবর্তনের জন্য আপনি ভার্চুয়ালেনভ্রাপার ব্যবহার করতে পারেন, যার মধ্যে কমান্ড রয়েছে ।
/usr/lib/python3/dist-packages
পরিবর্তে ফিরে আসে /usr/lib/python3.5/dist-packages
।
উবুন্টুর জন্য ,
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
...সঠিক নয়.
এটা আপনাকে নির্দেশ করবে /usr/lib/pythonX.X/dist-packages
এই ফোল্ডারে কেবল আপনার অপারেটিং সিস্টেম প্রোগ্রামগুলি চালনার জন্য স্বয়ংক্রিয়ভাবে ইনস্টল করা প্যাকেজগুলি রয়েছে।
উবুন্টুতে , সাইট-প্যাকেজ ফোল্ডারটিতে সেটআপ_টুলস installed ইজি_ইনস্টল \ পিপের মাধ্যমে ইনস্টল হওয়া প্যাকেজগুলি থাকবে/usr/local/lib/pythonX.X/dist-packages
ব্যবহারের কেসটি ইনস্টলেশন বা উত্স কোড পড়ার সাথে সম্পর্কিত হলে দ্বিতীয় ফোল্ডারটি সম্ভবত আরও কার্যকর।
আপনি যদি উবুন্টু ব্যবহার না করেন তবে আপনি সম্ভবত টার্মিনালে প্রথম কোড বাক্সটি নিরাপদে অনুলিপি করছেন।
module.__file__
তবে ভাল উপায়। যদি তারা জিনিসগুলি ইনস্টল করার চেষ্টা করছেন ... কেবলমাত্র সরঞ্জামগুলি ব্যবহার করুন।
'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()
উবুন্টুতে (যদিও এটি তালিকার পরে চলে /usr/local/...
) আপনি কেবল কিছু /usr/local
মাধ্যমে প্রবেশ করুন sudo pip
এবং আপনি sudo pip
নিজের বিতরণ করার সিদ্ধান্ত না নিলে উবুন্টুতে ব্যবহার করা উচিত নয় : আপনি যদি ব্যবহার করেন sudo pip
তবে বর্তমান এবং ভবিষ্যতের অজগর মডিউলগুলির সমস্ত নির্ভরতা ইনস্টল sudo apt
বা sudo pip
সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করা আপনার দায়িত্ব । কী সমস্যা সমাধানের virtualenv
জন্য তৈরি হয়েছিল তা
dist-packages
ইন (এল) উবুন্টুর পার্থক্য বুঝতে সুস্পষ্ট ব্যাখ্যা ।
এটিই আমার পক্ষে কাজ করেছে:
python -m site --user-site
~/.local/lib/python2.7/site-packages
)।
virtualenv
এটি করি তবে অভিযোগ করে যে প্যাকেজটির অস্তিত্ব নেই। আমি কাস্টম অবস্থানে ইনস্টল থাকা প্যাকেজগুলি কীভাবে আবেদন করব?
ধরা যাক আপনি 'জাজানো' প্যাকেজটি ইনস্টল করেছেন। এটি আমদানি করুন এবং টাইপ করুন দির (জাজানো)। এটি আপনাকে দেখাবে, সেই মডিউলটির সাথে সমস্ত কার্য এবং বৈশিষ্ট্য। পাইথন ইন্টারপ্রেটার টাইপ করুন -
>>> import django
>>> dir(django)
['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_version']
>>> print django.__path__
['/Library/Python/2.6/site-packages/django']
আপনি যদি মার্উরিয়াল ইনস্টল করেন তবে আপনি একই জিনিসটি করতে পারেন।
এটি স্নো চিতাবাঘের জন্য। তবে আমি মনে করি এটি সাধারণভাবেও কাজ করা উচিত।
django.__file__
পরিবর্তে এই জন্য ব্যবহার করুন __path__
। এবং, না, এটির কোনও গ্যারান্টি নয় যে এটি সাইটের প্যাকেজগুলির সাথে কিছু করার আছে তবে জ্যাঞ্জোর মতো জিনিসগুলির সাথে, আপনি সম্ভবত পাইপ ইনস্টল করেছেন , আপনি যখন তাড়াহুড়া করবেন তখন তা করবে এবং এটির জন্য ব্যবহার করা যেতে পারে অন্যান্য উদ্দেশ্যেও (উদাহরণস্বরূপ ফাইল সিস্টেম থেকে একটি ডিফল্ট কনফিগারেশন ফাইল পড়া)।
foo.bar
প্যাকেজ:python -c "import foo.bar as _; print(_.__path__[0])"
অন্যরা যেমন উল্লেখ distutils.sysconfig
করেছে , এর সাথে সম্পর্কিত সেটিংস রয়েছে:
import distutils.sysconfig
print distutils.sysconfig.get_python_lib()
... যদিও ডিফল্টটি site.py
আরও কিছু অপরিশোধিত কিছু করেছে যা নীচে বর্ণিত হয়েছে :
import sys, os
print os.sep.join([sys.prefix, 'lib', 'python' + sys.version[:3], 'site-packages'])
(এটি ${sys.prefix}/lib/site-python
উভয় পাথও যুক্ত করে এবং যুক্ত করে sys.exec_prefix
, এটি কি ধ্রুবক আলাদা হওয়া উচিত)।
সে বলল, প্রসঙ্গটা কী? আপনার site-packages
সরাসরি আপনার সাথে ঝামেলা করা উচিত নয় ; সেটআপলগুলি / ডিস্টুটিলগুলি ইনস্টলেশনের জন্য কাজ করবে এবং আপনার প্রোগ্রামটি ভার্চুয়ালেনভে চলতে পারে যেখানে আপনার পাইথনপাথ সম্পূর্ণরূপে ব্যবহারকারী-স্থানীয়, তাই এটি সরাসরি সিস্টেম-প্যাকেজগুলির সরাসরি ব্যবহার অনুমান করা উচিত নয়।
python2
অসু এবং উবুন্টুতে ভার্চুয়ালেনভের সাথে এবং ছাড়াও নির্ভরযোগ্য কাজ করে তবে একেবারেই python3
নয়।
python3
।
একটি আধুনিক স্টাডলিব উপায়টি sysconfig
মডিউলটি ব্যবহার করছে , সংস্করণ ২.7 এবং ৩.২+ এ উপলব্ধ।
দ্রষ্টব্য : sysconfig
( উত্স ) এখানে অন্য বেশ কয়েকটি distutils.sysconfig
উত্তরে উল্লিখিত সাবমডিউল ( উত্স ) দিয়ে বিভ্রান্ত হওয়ার দরকার নেই। পরেরটি সম্পূর্ণ ভিন্ন মডিউল এবং এটি get_paths
নীচে আলোচিত ফাংশনটির অভাব রয়েছে ।
পাইথন বর্তমানে আটটি পাথ ( ডক্স ) ব্যবহার করে:
- stdlib : স্ট্যান্ডার্ড পাইথন লাইব্রেরি ফাইলগুলি রয়েছে যা প্ল্যাটফর্ম-নির্দিষ্ট নয় directory
- platstdlib : স্ট্যান্ডার্ড পাইথন লাইব্রেরি ফাইল যা প্ল্যাটফর্ম-নির্দিষ্ট specific
- প্ল্যাটলিব : সাইট-নির্দিষ্ট, প্ল্যাটফর্ম-নির্দিষ্ট ফাইলের ডিরেক্টরি।
- শুদ্ধলিবি : সাইট-নির্দিষ্ট, অ-প্ল্যাটফর্ম-নির্দিষ্ট ফাইলের ডিরেক্টরি।
- অন্তর্ভুক্ত : প্ল্যাটফর্ম-নির্দিষ্ট হেডার ফাইলগুলির জন্য ডিরেক্টরি।
- প্ল্যাটিনক্লাউন : প্ল্যাটফর্ম-নির্দিষ্ট হেডার ফাইলগুলির জন্য ডিরেক্টরি।
- স্ক্রিপ্ট : স্ক্রিপ্ট ফাইলের জন্য ডিরেক্টরি।
- ডেটা : ডেটা ফাইলের জন্য ডিরেক্টরি।
বেশিরভাগ ক্ষেত্রে, ব্যবহারকারীরা এই প্রশ্নটি খুঁজে পাওয়ার জন্য 'খাঁটিলিব' পথে আগ্রহী হবে ( কিছু ক্ষেত্রে আপনি 'প্ল্যাটলিব'-এও আগ্রহী হতে পারেন)। বর্তমান গৃহীত উত্তরের মতো নয়, এই পদ্ধতিটি এখনও আপনার কোনও ভার্চুয়ালেনভ সক্রিয় কিনা তা নির্বিশেষে কাজ করে।
সিস্টেম স্তরে (এটি ম্যাক ওএসে পাইথন ৩.7.০):
>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'
একটি ভেন্যু সহ, আপনি এই জাতীয় কিছু পাবেন
>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/private/tmp/.venv/lib/python3.7/site-packages'
এই বিবরণগুলি প্রদর্শনের জন্য একটি শেল স্ক্রিপ্টও পাওয়া যায়, যা আপনি sysconfig
মডিউল হিসাবে সম্পাদন করে অনুরোধ করতে পারেন :
python -m sysconfig
platlib
যেমন স্থানীয় উপসর্গ পাওয়ার উপায় আছে কি /usr/local/lib/python3.6/site-packages
? Ditionতিহ্যগতভাবে, স্থানীয়ভাবে ইনস্টল থাকা জিনিসগুলি shouldোকা উচিত /usr/local
।
দেবিয়ান ভিত্তিক সিস্টেমে পাইথন ইনস্টলেশন সহ ইনস্টল করা নেটিভ সিস্টেম প্যাকেজগুলি এখানে পাওয়া যাবে:
/usr/lib/python2.7/dist-packages/
ওএসএক্সে - /Library/Python/2.7/site-packages
এই ছোট কোড ব্যবহার করে:
from distutils.sysconfig import get_python_lib
print get_python_lib()
তবে এর মাধ্যমে ইনস্টল করা প্যাকেজগুলির তালিকাটি এখানে pip
পাওয়া যাবে:
, / Usr / local / bin /
অথবা পাইথন প্যাকেজগুলি রয়েছে এমন সমস্ত রাস্তাগুলি তালিকাভুক্ত করতে নিম্নলিখিত কমান্ডটি লিখতে পারেন।
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
দ্রষ্টব্য: অবস্থানটি ওএসএক্সের মতো আপনার ওএসের ভিত্তিতে পরিবর্তিত হতে পারে
>>> import site; site.getsitepackages()
['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python', '/Library/Python/2.7/site-packages']
site.getsitepackages()
সিস্টেম ইনস্টলেশন থেকে অনুরোধ করেছি তাই ডি-প্যাকেজগুলি, অন্যান্য ইনস্টলেশন সাইট-প্যাকেজগুলি দেখায়।
সমস্ত উত্তর (বা: একই উত্তর বারবার পুনরায় করা) অপর্যাপ্ত। আপনি যা করতে চান তা হ'ল:
from setuptools.command.easy_install import easy_install
class easy_install_default(easy_install):
""" class easy_install had problems with the fist parameter not being
an instance of Distribution, even though it was. This is due to
some import-related mess.
"""
def __init__(self):
from distutils.dist import Distribution
dist = Distribution()
self.distribution = dist
self.initialize_options()
self._dry_run = None
self.verbose = dist.verbose
self.force = None
self.help = 0
self.finalized = 0
e = easy_install_default()
import distutils.errors
try:
e.finalize_options()
except distutils.errors.DistutilsError:
pass
print e.install_dir
চূড়ান্ত লাইনটি আপনাকে ইনস্টলেশন ডিয়ার দেখায়। উবুন্টুতে কাজ করে, যেখানে উপরেরগুলি তা করে না। উইন্ডোজ বা অন্যান্য ডিসট সম্পর্কে আমাকে জিজ্ঞাসা করবেন না, যেহেতু এটি ইজ_আইনস্টলটি ডিফল্টরূপে ঠিক একই দির ব্যবহার করে, ইজি_ইনস্টল যেখানে কাজ করে (সম্ভবত, সর্বত্র, এমনকি ম্যাকস) এটি সর্বত্রই সঠিক। আনন্দ কর. দ্রষ্টব্য: মূল কোডটিতে এর অনেকগুলি স্বারওয়ার্ড রয়েছে।
easy_install
এবং অনুপলব্ধ যা অপ্রতুলতা থাকলে তা চূড়ান্তভাবে ব্যর্থ হয় না :)
একটি পার্শ্ব-নোট: distutils.sysconfig.get_python_lib()
একাধিক সাইট-প্যাকেজ ডিরেক্টরি উপস্থিত থাকলে ( এই নিবন্ধটি প্রস্তাবিত হিসাবে) প্রস্তাবিত সমাধান ( ) কাজ করে না । এটি কেবলমাত্র মূল সাইট-প্যাকেজ ডিরেক্টরিটি ফিরিয়ে দেবে।
হায়রে আমার আর এর চেয়ে ভাল সমাধান আর নেই। পাইথন সাইট-প্যাকেজ ডিরেক্টরিগুলির মধ্যে কেবল প্যাকেজগুলির মধ্যে নজর রাখে না।
get_python_lib()
যখন ভার্চুয়ালেনভের মধ্যে থেকে চালানো হচ্ছে তখন পাইথনের সাইট-প্যাকেজগুলি ভ্যুচুয়ালেনভ তৈরি করেছিল এবং ভ্যুচুয়ালেনভের সাইট-প্যাকেজগুলি নয় ।
এটি আমার পক্ষে কাজ করে। এটি আপনাকে ডিস্ট-প্যাকেজ এবং সাইট-প্যাকেজ ফোল্ডার উভয়ই পেতে পারে। যদি ফোল্ডারটি পাইথনের পথে না থাকে তবে এটি যাইহোক আপনাকে খুব ভাল করবে না।
import sys;
print [f for f in sys.path if f.endswith('packages')]
আউটপুট (উবুন্টু ইনস্টলেশন):
['/home/username/.local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages']
এটি "লো-টেক" প্রকৃতির কারণে ভার্চুয়াল পরিবেশের মধ্যে এবং বাইরে সমস্ত বিতরণে কাজ করা উচিত। ওএস মডিউলটি সর্বদা 'সাইট-প্যাকেজগুলি' এর মূল ডিরেক্টরিতে থাকে
import os; print(os.path.dirname(os.__file__) + '/site-packages')
সাইট-প্যাকেজগুলিতে ডির পরিবর্তন করতে আমি নীচের উপন্যাসটি ব্যবহার করব (* নিক্স সিস্টেমে):
alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'
get_python_lib
ইতিমধ্যে উল্লিখিত ফাংশনের একটি অতিরিক্ত নোট : কিছু প্ল্যাটফর্মে প্ল্যাটফর্ম নির্দিষ্ট মডিউলগুলির জন্য বিভিন্ন ডিরেক্টরি ব্যবহার করা হয় (যেমন: মডিউলগুলির সংকলন প্রয়োজন)। আপনি যদি plat_specific=True
ফাংশনটি পাস করেন তবে প্ল্যাটফর্ম নির্দিষ্ট প্যাকেজগুলির জন্য সাইট প্যাকেজগুলি পাবেন।
from distutils.sysconfig import get_python_lib
print get_python_lib()
পাইপ শো একটি প্যাকেজ সম্পর্কে সমস্ত বিবরণ দেবে: https://pip.pypa.io/en/stable/references/pip_show/ [পিপ শো] [1]
অবস্থান পেতে:
pip show <package_name>| grep Location
পুরানো প্রশ্নের উত্তর। তবে এজন্য আইপিথন ব্যবহার করুন।
pip install ipython
ipython
import imaplib
imaplib?
এটি ইমামপ্লিব প্যাকেজ সম্পর্কে নিম্নোক্ত আউটপুট দেবে -
Type: module
String form: <module 'imaplib' from '/usr/lib/python2.7/imaplib.py'>
File: /usr/lib/python2.7/imaplib.py
Docstring:
IMAP4 client.
Based on RFC 2060.
Public class: IMAP4
Public variable: Debug
Public functions: Internaldate2tuple
Int2AP
ParseFlags
Time2Internaldate
আমি যে প্রকল্পে কাজ করছি তার জন্য আমাকে কিছুটা আলাদা করতে হয়েছিল: বেস ইনস্টল উপসর্গের সাথে সম্পর্কিত সাইট-প্যাকেজ ডিরেক্টরিটি সন্ধান করুন। সাইট-প্যাকেজ ফোল্ডারটি থাকলে /usr/lib/python2.7/site-packages
আমি সেই /lib/python2.7/site-packages
অংশটি চাইতাম । আমি প্রকৃতপক্ষে যেখানে site-packages
ছিল সেখানে সিস্টেমগুলির মুখোমুখি হয়েছিল/usr/lib64
সেগুলির এবং গ্রহণযোগ্য উত্তরগুলি systems সিস্টেমে কার্যকর হয়নি।
চিটারের উত্তরের মতো, আমার সমাধানটি ডিস্টুটিলসের সাহসের গভীরে উঁকি দেয়, এমন পথটি খুঁজে পায় যা আসলে ভিতরে passedুকে পড়ে setup.py
। এটা বোঝার জন্য এমন ব্যথা হয়েছিল যে আমি চাই না যে কাউকে আবার কখনও এটি বের করতে হবে।
import sys
import os
from distutils.command.install import INSTALL_SCHEMES
if os.name == 'nt':
scheme_key = 'nt'
else:
scheme_key = 'unix_prefix'
print(INSTALL_SCHEMES[scheme_key]['purelib'].replace('$py_version_short', (str.split(sys.version))[0][0:3]).replace('$base', ''))
ওই জাতীয় কিছু প্রিন্ট করা উচিত /Lib/site-packages
বা /lib/python3.6/site-packages
।
pip show <package name>