मुझे अपने पायथन साइट-संकुल निर्देशिका का स्थान कैसे मिलेगा?


940

मुझे अपनी साइट-संकुल निर्देशिका का स्थान कैसे मिलेगा?


63
यदि आप सिर्फ एक पैकेज का सही स्थान चाहते हैं तो आप उपयोग कर सकते हैंpip show <package name>
joshuakcockrell

जवाबों:


528

दो प्रकार के साइट-पैकेज निर्देशिकाएं हैं, वैश्विक और प्रति उपयोगकर्ता

  1. वैश्विक साइट-पैकेज (" डिस्ट-पैकेज ") 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"])'
  2. प्रति उपयोगकर्ता साइट-संकुल निर्देशिका ( पीईपी 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

17
एक virtualenv में एक साइट पैकेज निर्देशिका है। आप virtualenv के अंदर / बाहर साइट-विशिष्ट मॉड्यूल के लिए निर्देशिका प्राप्त कर सकते हैं python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"(यह पायथन 2 और 3 दोनों पर भी काम करता है)।
jfs

4
अच्छा लगा। और पहला पाने के लिए:python -c "import site; print(site.getsitepackages()[0])"
ब्रेंट फस्ट

2
यह अजगर का उपयोग करने पर किसी भी मूल ट्यूटोरियल में होना चाहिए। मैं वर्षों से अजगर रहा हूं और साइट मॉड्यूल के बारे में नहीं जानता था। बहुत सारे सिरदर्द बचाए होंगे ...
salotz

1
मैंने पायथन के आधिकारिक ट्यूटोरियल में बदलाव का सुझाव दिया है। कृपया विवरण के लिए PR # 16974 देखें, और सुझाव के लिए धन्यवाद @salotz!
पीटरिनो

1
मुझे लगता है कि stackoverflow.com/a/52638888/1365918 इस प्रश्न का सबसे अच्छा उत्तर है।
kapad

652
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

(या सिर्फ पहले आइटम के साथ site.getsitepackages()[0])


17
यह अच्छा है लेकिन, दुर्भाग्य से, यह फ़ंक्शन केवल python2.7 से उपलब्ध है। तो, अच्छा समाधान यदि आप python2.7 या इसके बाद के संस्करण का उपयोग कर रहे हैं, लेकिन अजगर 2.6 और उससे नीचे के लिए काम नहीं कर रहा है
Dan Niero

15
अजगर-सी "आयात साइट; प्रिंट (site.getitepackages ())"
लार्स श्नाइडर

29
मुझे एट्रीब्यूट मिलता है: virtualenv (अजगर 2.7.8) के साथ उपयोग करते समय 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं होती है, हालांकि नीचे काम करता है।
राडटेक

8
@radtek: venv के लिए, मैं venv के माध्यम से पता लगाने hasattr(sys,'real_prefix')और उसके बाद heuristically साइट संकुल का निर्धारण से [p for p in sys.path if p.endswith('site-packages')][-1](प्लस जाँच अगर वहाँ एक करने से पहले मिला है [-1]
eudoxos

4
@radtek यह एक ज्ञात बग है कि साइट मॉड्यूल virtualenv github.com/pypa/virtualenv/issues/355 के
Guillem Cucurull

319

एक समाधान जो:

  • virtualenv के बाहर - वैश्विक साइट-संकुल का पथ प्रदान करता है,
  • एक virtualenv insidue - virtualenv की साइट-संकुल प्रदान करता है

... क्या यह वन-लाइनर है:

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 स्थापना से अधिक उपयोगी है)


1
क्या virtualenv अपने साइट-संकुल को खोजने का एक तरीका प्रदान करता है?
डेरिल स्पिट्जर

10
आप virtualenvwrapper का उपयोग कर सकते हैं, जिसके पास कमांड है cdsitepackages, जो सीधे पर्यावरण के साइट-पैकेज निर्देशिका में बदल सकता है।
john2x

6
@PiotrDobrogost: लिनक्स पर एक
वर्चुअन

2
पहली टिप्पणी अब लागू नहीं होती है: यह एक virtualenv के बाहर और अंदर दोनों को सही स्थान दिखाता है।
astrojuanlu

2
लिनक्स बैश का उपयोग करके विंडोज 10 पर मेरे लिए काम नहीं किया, यह /usr/lib/python3/dist-packagesबदले में लौटता है /usr/lib/python3.5/dist-packages
डेलगन

99

उबंटू के लिए ,

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

यदि उपयोग मामला इंस्टॉलेशन या पठन स्रोत कोड से संबंधित है तो दूसरा फ़ोल्डर संभवतः अधिक उपयोगी है।

यदि आप उबंटू का उपयोग नहीं करते हैं, तो आप संभवतः पहले कोड बॉक्स को टर्मिनल में कॉपी-पेस्ट कर रहे हैं।


3
यदि किसी विशेष पैकेज के स्थान के बाद पूछने module.__file__वाला बेहतर तरीका है। यदि वे चीजों को स्थापित करने की कोशिश कर रहे हैं ... बस उपकरण का उपयोग करें।
तोबू

'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()उबंटू पर (हालांकि यह सूची में बाद /usr/local/... में आता है)। आप केवल में कुछ पाने /usr/localके माध्यम से sudo pipऔर आप उपयोग नहीं करना चाहिए sudo pipUbuntu पर जब तक आप अपने स्वयं के वितरण बनाने का फैसला किया: यदि आप का उपयोग करें sudo pip, यह सुनिश्चित करें कि वर्तमान और के सभी निर्भरता बनाने के लिए अपनी जिम्मेदारी है कि भविष्य अजगर मॉड्यूल के माध्यम से स्थापित sudo aptया sudo pipसंगत हैं। विचार करें कि समस्या virtualenvको हल करने के लिए क्या बनाया गया था
jfs

2 dist-packages(एल) उबंटू में अंतर को समझने के लिए स्पष्ट स्पष्टीकरण ।
तिमो

69

इसी से मेरा काम बना है:

python -m site --user-site

15
मेरे लिए यह उस फ़ोल्डर की ओर इशारा करता है जो मौजूद नहीं है ( ~/.local/lib/python2.7/site-packages)।
नील ट्राफट

1
उसी में, ओएस एक्स मावेरिक्स में, मेरा घर है। ऐसा नहीं है कि मैं यह चाहता था कि मुझे इसके अलावा वास्तव में वैसे भी नहीं मिलें।
radtek

अपने मुख्य / लाइब्रेरी फ़ोल्डर में इसका मुझे मैन्युअल रूप से नेविगेट करना पड़ा, किसी कारण से प्रत्यक्ष पूर्ण पथ काम नहीं कर रहा था
efwjames

मैं यहां स्थापित पैकेजों का उपयोग कैसे करूं? अगर मैं virtualenvयह शिकायत करता हूं कि पैकेज मौजूद नहीं है मैं कस्टम स्थान पर स्थापित पैकेजों का आह्वान कैसे करूं?
एबटस्ट

2
यह आपको बताता है कि पायथन उपयोगकर्ता विशिष्ट पैकेजों के लिए कहां देखेगा। "इस तरह से भी अस्तित्व में नहीं है" और "मैं इसे ढूंढना नहीं चाहता था" जैसी टिप्पणियाँ इस संदर्भ में कोई मतलब नहीं रखती हैं।
ईमानदार अबे

28

मान लीजिए कि आपने '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']

आप वही काम कर सकते हैं यदि आपने मर्क्यूरियल लगाया हो।

यह स्नो लेपर्ड के लिए है। लेकिन मुझे लगता है कि इसे सामान्य रूप से भी काम करना चाहिए।


>>> आयात pg >>> Print pg .__ path__ Traceback (सबसे हालिया कॉल अंतिम): फ़ाइल "<stdin>", पंक्ति 1, में <मॉड्यूल> विशेषता गुण: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता ' पथ ' नहीं है
Dannid

यह काम करता है, मुझे PYDEV पथ में जोड़ने के लिए sklearn पैकेज खोजने की आवश्यकता है, धन्यवाद।
बर्काय

django.__file__इसके बजाय इसके लिए उपयोग करें __path__। और, नहीं, यह कोई गारंटी नहीं है कि साइट-पैकेज के साथ इसका कोई लेना-देना नहीं है, लेकिन django जैसी चीजों के साथ, कि आपने सबसे अधिक संभावना पाइप स्थापित किया है , यह तब होगा जब आप जल्दी में हों और इसका उपयोग किया जा सके अन्य उद्देश्यों के साथ-साथ (उदाहरण के लिए फ़ाइल सिस्टम से डिफ़ॉल्ट कॉन्फ़िगर फ़ाइल पढ़ना)।
JL Peyret

इसके और अन्य उत्तरों के आधार पर आप अपने foo.barपैकेज का रास्ता पाने के लिए कमांड लाइन से एक लाइन में यह कर सकते हैं :python -c "import foo.bar as _; print(_.__path__[0])"
स्नार्क

23

जैसा कि दूसरों ने नोट किया है, 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 पूरी तरह से उपयोगकर्ता-स्थानीय है, इसलिए इसे सीधे सिस्टम साइट-पैकेज का उपयोग नहीं करना चाहिए।


3
python2osx और ubuntu के साथ और virtualenv के बिना विश्वसनीय काम करता है, लेकिन बिल्कुल भी नहीं python3
घबराना

2
2008 कुछ समय पहले था - यह जवाब पायथन 3.0 की रिलीज़ से तीन महीने पहले था।
चार्ल्स डफी

यकीन है, लेकिन आज मेरी टिप्पणी से मदद मिल सकती है। गलत होने पर मुझे सही करो इसके अलावा, मैं इस जवाब या किसी अन्य के संबंध में नहीं था python3
घबराना

22

एक आधुनिक 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

यह एक महान जवाब है, मुझे खुशी है कि नया sysconfig मॉड्यूल इसे आसान बनाता है। क्या स्थानीय उपसर्ग प्राप्त करने का एक तरीका है platlib, जैसे कि /usr/local/lib/python3.6/site-packages? परंपरागत रूप से, स्थानीय रूप से स्थापित चीजों में जाना चाहिए /usr/local
यूडॉक्सोस

आसानी से इस सवाल का सबसे अच्छा जवाब! धन्यवाद। केवल एक चीज जो मुझे गायब मिली वह थी ऑर्डरिंग जिसमें इन स्थानों की जाँच की जाती है जब एक आयात विवरण सामने आता है। जब अजगर लोड किया जाता है, तो क्या इनमें से कोई भी स्थान पहले से खोजा / बंद किया गया है? यह जानते हुए भी कि उपयोगी IMO होगा।
kapad

21

डेबियन आधारित सिस्टम में अजगर स्थापना के साथ स्थापित देशी सिस्टम पैकेज निम्न पर पाए जा सकते हैं:

/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']

अगर मुझे सही से याद है, तो डिस्ट-पैकेज डेबियन और व्युत्पन्न के लिए विशिष्ट है।
शमूएल

1
@SamuelSantana आप सही हैं। डिस्ट-पैकेज डेबियन आधारित सिस्टम के लिए विशिष्ट हैं। इस मामले में मैंने site.getsitepackages()सिस्टम इंस्टॉलेशन से आह्वान किया इसलिए डिस्ट-पैकेज, अन्य इंस्टॉलेशन साइट-पैकेज दिखाएंगे।
fnatic_shank

15

सभी उत्तर (या: एक ही उत्तर को बार-बार दोहराया गया) अपर्याप्त हैं। आप यह करना चाहते हैं:

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 हैं।


1
धन्यवाद, यह बहुत उपयोगी है, py3 पर ब्रैकेट्स के साथ प्रिंट के लिए यह मुझे /usr/local/lib/python3.4/dist-packages मैं काम करने की कोशिश कर रहा हूं कि कैसे /usr/lib/python3.4/dist प्राप्त करें -पैकेज को आगे खेलना होगा।
स्टुअर्ट एक्सॉन

4
बाहरी पुस्तकालय की आवश्यकता है easy_installऔर शान से विफल नहीं करता है, तो जो उपलब्ध नहीं है अपर्याप्त :)
घबराना

1
वास्तव में, यह बिल्कुल सही नहीं है, लेकिन इसने मेरे लिए काम किया और यह पता लगाने में बहुत समय लगा, इसलिए मैंने इसे यहाँ रखा है कि कोई और मेरे द्वारा पहले ही बिताए गए समय पर किसी और का निर्माण कर सके।
चीटर

13

एक साइड-नोट: प्रस्तावित समाधान ( distutils.sysconfig.get_python_lib()) तब काम नहीं करता है जब एक से अधिक साइट-पैकेज निर्देशिका हो (जैसा कि इस आलेख द्वारा अनुशंसित है )। यह केवल मुख्य साइट-संकुल निर्देशिका लौटाएगा।

काश, मेरे पास कोई बेहतर उपाय भी नहीं होता। पायथन साइट-पैकेज निर्देशिकाओं का ट्रैक रखने के लिए प्रतीत नहीं होता है, बस उनके भीतर संकुल।


1
मुझे लगता है कि यही कारण है कि get_python_lib()जब virtualenv के भीतर से चलाया जा रहा है तो Python के साइट-पैकेज virtualenv बनाने के लिए उपयोग किए जाते हैं न कि virtualenv के साइट-पैकेज
पिओट्र डोब्रोगोस्ट

3
@Potr यह संभवतः distutils.sysconfig में एक बग था। मैंने अभी-अभी इसकी जांच की है कि मुझे उम्मीद के मुताबिक इनर साइट-पैकेज मिलते हैं।
तोबू

इसके अलावा लिनक्स पर एक virtualenv में स्थापित पायथन 2.7 के साथ परीक्षण किया गया है, और आंतरिक पायथन के साइट-पैकेज प्राप्त करने के लिए distutils.sysconfig विधि ठीक काम करती है।
रिचवेल

12

यह मेरे लिए काम करता है। यह आपको डिस्ट-पैकेज और साइट-पैकेज दोनों फ़ोल्डर प्राप्त करेगा। यदि फ़ोल्डर पायथन के पथ पर नहीं है, तो यह आपको वैसे भी बहुत अच्छा नहीं करेगा।

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']

2
स्वीकृत उत्तर अनुशंसित तरीका है, इसलिए आपको यह बताना चाहिए कि आपका क्यों बेहतर है, क्योंकि यह हैक का एक सा है
चार्ल्स बी

एक हैक के साथ क्या गलत है? ;) यदि आप सहभागी रूप से काम कर रहे हैं तो यह समझना और याद रखना सरल और आसान है।
just_an_old_guy

11

वर्चुअल वातावरण के अंदर और बाहर सभी वितरण पर काम करना चाहिए, क्योंकि यह "कम तकनीक" की प्रकृति है। ओएस मॉड्यूल हमेशा 'साइट-संकुल' की मूल निर्देशिका में रहता है

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'

10

get_python_libपहले से ही उल्लेख किए गए फ़ंक्शन के लिए एक अतिरिक्त नोट : कुछ प्लेटफार्मों पर प्लेटफ़ॉर्म विशिष्ट मॉड्यूल के लिए अलग-अलग निर्देशिकाओं का उपयोग किया जाता है (जैसे: मॉड्यूल जिन्हें संकलन की आवश्यकता होती है)। यदि आप plat_specific=Trueफ़ंक्शन पर जाते हैं तो आपको प्लेटफ़ॉर्म विशिष्ट पैकेज के लिए साइट पैकेज मिलते हैं।




3

पुराने सवाल का जवाब। लेकिन इसके लिए 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

1
यह साइट-पैकेज निर्देशिका नहीं है, लेकिन वह निर्देशिका जो पैकेज में स्थापित है। यह केवल तभी उपयोगी है जब आप iPython का उपयोग कर रहे हैं और प्रोग्राम स्थापित करने में सक्षम होने के लिए नहीं है।
danielunderwood

3

आपको पाइप के इंस्टॉल स्थान को निर्धारित करने के लिए इस कमांड को आज़माना चाहिए

अजगर २

pip show six | grep "Location:" | cut -d " " -f2

अजगर

pip3 show six | grep "Location:" | cut -d " " -f2

1

मुझे उस परियोजना के लिए कुछ अलग करना था, जिस पर मैं काम कर रहा था: आधार स्थापित उपसर्ग के सापेक्ष सापेक्ष साइट-संकुल निर्देशिका खोजें। यदि साइट-पैकेज फ़ोल्डर में था /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


-2

यदि यह पहले से ही आप में जोड़ा जाता है तो PYTHONPATHआप भी कुछ ऐसा कर सकते हैं

import sys
print('\n'.join(sys.path))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.