जवाबों:
दो प्रकार के साइट-पैकेज निर्देशिकाएं हैं, वैश्विक और प्रति उपयोगकर्ता ।
वैश्विक साइट-पैकेज (" डिस्ट-पैकेज ") sys.path
जब आप चलाते हैं , तो निर्देशिकाएं सूचीबद्ध होती हैं:
python -m site
पायथन कोड में साइट मॉड्यूलgetsitepackages
से अधिक संक्षिप्त सूची के लिए:
python -c 'import site; print(site.getsitepackages())'
नोट: virtualenvs के साथ getitepackages उपलब्ध नहीं है , sys.path
ऊपर से virtualenv की साइट-संकुल निर्देशिका को सही ढंग से सूचीबद्ध करेगा, हालाँकि। पायथन 3 में, आप इसके बजाय sysconfig मॉड्यूल का उपयोग कर सकते हैं :
python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])'
प्रति उपयोगकर्ता साइट-संकुल निर्देशिका ( पीईपी 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())
स्रोत: "How to Install Django" प्रलेखन का एक बहुत पुराना संस्करण (हालांकि यह सिर्फ Django स्थापना से अधिक उपयोगी है)
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
इस फ़ोल्डर में केवल वे पैकेज हैं जो आपके ऑपरेटिंग सिस्टम ने प्रोग्राम चलाने के लिए स्वचालित रूप से इंस्टॉल किए हैं।
Ubuntu पर , साइट-संकुल फ़ोल्डर जिसमें setup_tools \ easy_install \ pip के माध्यम से संस्थापित संकुल शामिल है/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
Ubuntu पर जब तक आप अपने स्वयं के वितरण बनाने का फैसला किया: यदि आप का उपयोग करें sudo pip
, यह सुनिश्चित करें कि वर्तमान और के सभी निर्भरता बनाने के लिए अपनी जिम्मेदारी है कि भविष्य अजगर मॉड्यूल के माध्यम से स्थापित sudo apt
या sudo pip
संगत हैं। विचार करें कि समस्या virtualenv
को हल करने के लिए क्या बनाया गया था
dist-packages
(एल) उबंटू में अंतर को समझने के लिए स्पष्ट स्पष्टीकरण ।
इसी से मेरा काम बना है:
python -m site --user-site
~/.local/lib/python2.7/site-packages
)।
virtualenv
यह शिकायत करता हूं कि पैकेज मौजूद नहीं है मैं कस्टम स्थान पर स्थापित पैकेजों का आह्वान कैसे करूं?
मान लीजिए कि आपने 'django' पैकेज स्थापित किया है। इसे आयात करें और dir (django) में टाइप करें। यह आपको उस मॉड्यूल के साथ सभी कार्यों और विशेषताओं को दिखाएगा। अजगर दुभाषिया में टाइप करें -
>>> 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__
। और, नहीं, यह कोई गारंटी नहीं है कि साइट-पैकेज के साथ इसका कोई लेना-देना नहीं है, लेकिन django जैसी चीजों के साथ, कि आपने सबसे अधिक संभावना पाइप स्थापित किया है , यह तब होगा जब आप जल्दी में हों और इसका उपयोग किया जा सके अन्य उद्देश्यों के साथ-साथ (उदाहरण के लिए फ़ाइल सिस्टम से डिफ़ॉल्ट कॉन्फ़िगर फ़ाइल पढ़ना)।
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
सीधे से खिलवाड़ नहीं करना चाहिए ; setuptools / distutils स्थापना के लिए काम करेंगे, और आपका प्रोग्राम एक virtualenv में चल रहा हो सकता है जहाँ आपका pythonpath पूरी तरह से उपयोगकर्ता-स्थानीय है, इसलिए इसे सीधे सिस्टम साइट-पैकेज का उपयोग नहीं करना चाहिए।
python2
osx और ubuntu के साथ और virtualenv के बिना विश्वसनीय काम करता है, लेकिन बिल्कुल भी नहीं python3
।
python3
।
एक आधुनिक stdlib तरीका sysconfig
मॉड्यूल का उपयोग कर रहा है, जो संस्करण 2.7 और 3.2+ में उपलब्ध है।
नोट : sysconfig
( स्रोत ) यहाँ कई अन्य उत्तरों में उल्लिखित distutils.sysconfig
सबमॉड्यूल ( स्रोत ) के साथ भ्रमित नहीं होना है। उत्तरार्द्ध एक पूरी तरह से अलग मॉड्यूल है और यह get_paths
नीचे चर्चा किए गए फ़ंक्शन का अभाव है ।
पायथन वर्तमान में आठ रास्तों का उपयोग करता है ( डॉक्स ):
- stdlib : मानक पायथन लाइब्रेरी फ़ाइलों वाली निर्देशिका, जो प्लेटफ़ॉर्म-विशिष्ट नहीं हैं।
- प्लैटस्टडीलिब : निर्देशिका जिसमें मानक पायथन लाइब्रेरी फाइलें हैं जो प्लेटफ़ॉर्म-विशिष्ट हैं।
- प्लैटलिब : साइट-विशिष्ट, प्लेटफ़ॉर्म-विशिष्ट फ़ाइलों के लिए निर्देशिका।
- Purelib : साइट-विशिष्ट, गैर-प्लेटफ़ॉर्म-विशिष्ट फ़ाइलों के लिए निर्देशिका।
- शामिल हैं : गैर-प्लेटफ़ॉर्म-विशिष्ट हेडर फ़ाइलों के लिए निर्देशिका।
- प्लेटिनक्यूलिड : प्लेटफ़ॉर्म-विशिष्ट हेडर फ़ाइलों के लिए निर्देशिका।
- स्क्रिप्ट : स्क्रिप्ट फ़ाइलों के लिए निर्देशिका।
- डेटा : डेटा फ़ाइलों के लिए निर्देशिका।
ज्यादातर मामलों में, इस प्रश्न को खोजने वाले उपयोगकर्ता 'प्योरलिब' पथ में रुचि रखते हैं ( कुछ मामलों में , आपको 'प्लाटलिब' में भी रुचि हो सकती है)। वर्तमान स्वीकृत उत्तर के विपरीत, यह विधि अभी भी इस बात पर ध्यान दिए बिना काम करती है कि आपके पास एक virtualenv सक्रिय है या नहीं।
सिस्टम स्तर पर (यह मैक ओएस पर पायथन 3.7.0 है):
>>> 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
? परंपरागत रूप से, स्थानीय रूप से स्थापित चीजों में जाना चाहिए /usr/local
।
डेबियन आधारित सिस्टम में अजगर स्थापना के साथ स्थापित देशी सिस्टम पैकेज निम्न पर पाए जा सकते हैं:
/usr/lib/python2.7/dist-packages/
OSX में - /Library/Python/2.7/site-packages
इस छोटे कोड का उपयोग करके:
from distutils.sysconfig import get_python_lib
print get_python_lib()
हालाँकि, के माध्यम से स्थापित पैकेजों की सूची यहाँ pip
मिल सकती है:
/ Usr / स्थानीय / bin /
या फिर बस उन सभी रास्तों को सूचीबद्ध करने के लिए निम्नलिखित कमांड लिख सकते हैं जहां अजगर पैकेज हैं।
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
नोट: स्थान आपके OS के आधार पर भिन्न हो सकता है, जैसे OSX में
>>> 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
अंतिम पंक्ति आपको इंस्टॉलेशन dir दिखाती है। उबंटू पर काम करता है, जबकि ऊपर वाले नहीं करते हैं। मुझसे विंडोज़ या अन्य डिस्टर्ब के बारे में न पूछें, लेकिन चूंकि यह वही डाइर है जो डिफ़ॉल्ट रूप से easy_install उपयोग करता है, यह शायद हर जगह सही है जहां easy_install काम करता है (इसलिए, हर जगह, यहां तक कि macs)। मज़े करो। नोट: ओरिजिनल कोड में कई सारे swearwords हैं।
easy_install
और शान से विफल नहीं करता है, तो जो उपलब्ध नहीं है अपर्याप्त :)
एक साइड-नोट: प्रस्तावित समाधान ( distutils.sysconfig.get_python_lib()
) तब काम नहीं करता है जब एक से अधिक साइट-पैकेज निर्देशिका हो (जैसा कि इस आलेख द्वारा अनुशंसित है )। यह केवल मुख्य साइट-संकुल निर्देशिका लौटाएगा।
काश, मेरे पास कोई बेहतर उपाय भी नहीं होता। पायथन साइट-पैकेज निर्देशिकाओं का ट्रैक रखने के लिए प्रतीत नहीं होता है, बस उनके भीतर संकुल।
get_python_lib()
जब virtualenv के भीतर से चलाया जा रहा है तो Python के साइट-पैकेज virtualenv बनाने के लिए उपयोग किए जाते हैं न कि virtualenv के साइट-पैकेज ।
यह मेरे लिए काम करता है। यह आपको डिस्ट-पैकेज और साइट-पैकेज दोनों फ़ोल्डर प्राप्त करेगा। यदि फ़ोल्डर पायथन के पथ पर नहीं है, तो यह आपको वैसे भी बहुत अच्छा नहीं करेगा।
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')
Dir को साइट-संकुल dir में बदलने के लिए, मैं निम्नलिखित उपनाम (* nix सिस्टम) का उपयोग करता हूं:
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/reference/pip_show/ [पाइप शो] [1]
स्थान पाने के लिए:
pip show <package_name>| grep Location
पुराने सवाल का जवाब। लेकिन इसके लिए ipython का उपयोग करें।
pip install ipython
ipython
import imaplib
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
, और स्वीकृत जवाब उन प्रणालियों पर काम नहीं करता था।
चीटर के उत्तर के समान, मेरा समाधान डिस्टुटिल्स की हिम्मत में गहराई से झांकता है, जो उस पथ को खोजने के लिए है जो वास्तव में अंदर से गुजरता है 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>