මගේ පයිතන් අඩවි පැකේජ නාමාවලියෙහි ස්ථානය සොයා ගන්නේ කෙසේද?


977

මගේ අඩවි පැකේජ නාමාවලියෙහි ස්ථානය සොයා ගන්නේ කෙසේද?


70
ඔබට එක් පැකේජයක නිශ්චිත ස්ථානය අවශ්‍ය නම් ඔබට භාවිතා කළ හැකියpip show <package name>
joshuakcockrell

Answers:


566

ගෝලීය සහ එක් පරිශීලකයෙකුට අඩවි පැකේජ නාමාවලි වර්ග දෙකක් තිබේ .

  1. ඔබ ක්‍රියාත්මක වන විට ගෝලීය අඩවි පැකේජ (" dist-packages ") නාමාවලි ලැයිස්තුගත කර ඇත sys.path:

    python -m site

    ධාවනය වඩා සංක්ෂිප්ත ලැයිස්තුව සඳහා getsitepackagesවලින් වෙබ් අඩවිය මොඩියුලය Python කේත දී:

    python -c 'import site; print(site.getsitepackages())'

    සටහන: virtualenvs getitepackages ලබා ගත නොහැකි බැවින් , sys.pathඉහළින් සිට virtualenv හි අඩවි-පැකේජ නාමාවලිය නිවැරදිව ලැයිස්තුගත කරනු ඇත. Python 3 හි, ඔබට ඒ වෙනුවට sysconfig මොඩියුලය භාවිතා කළ හැකිය :

    python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])'
  2. මෙම පරිශීලක අනුව වෙබ් අඩවිය පැකේජ ඩිරෙක්ටරිය ( පී 370 ) Python ඔබේ දේශීය පැකේජ ස්ථාපනය යනු:

    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 බලන්න, සහ alsalotz යෝජනාවට ස්තූතියි!
පීටරිනෝ

1
මම හිතන්නේ stackoverflow.com/a/52638888/1365918 මෙම ප්‍රශ්නයට හොඳම පිළිතුරයි.
kapad

655
>>> 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 හෝ ඊට වැඩි භාවිතා කරන්නේ නම්, නමුත් python 2.6 සහ ඊට පහළින් වැඩ නොකරන්නේ නම් හොඳ විසඳුමක්
Dan Niero

15
python -c "import site; print (site.getsitepackages ())"
Lars Schneider

29
මට AttributeError: virtualenv (python 2.7.8) සමඟ භාවිතා කරන විට 'මොඩියුල' වස්තුවට 'getitepackages' යන ගුණාංගයක් නොමැත, පහත දැක්වෙන distutils විසඳුම ක්‍රියාත්මක වේ.
radtek

8
@radtek: venv සඳහා, මම venv හරහා හඳුනාගෙන hasattr(sys,'real_prefix')පසුව වෙබ් අඩවි පැකේජයන් තීව්‍ර ලෙස තීරණය කරමි. [p for p in sys.path if p.endswith('site-packages')][-1](එසේ කිරීමට පෙර එකක් තිබේදැයි පරීක්ෂා කරන්න [-1].
eudoxos

4
teradtek වෙබ් මොඩියුලය virtualenv github.com/pypa/virtualenv/issues/355
ගිලෙම් කුකුරල්

325

විසඳුමක්:

  • virtualenv වලින් පිටත - ගෝලීය අඩවි පැකේජවල මාවත සපයයි ,
  • insidue a virtualenv - 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())


මූලාශ්‍රය: "ජැන්ගෝ ස්ථාපනය කරන්නේ කෙසේද" ප්‍රලේඛනයේ ඉතා පැරණි අනුවාදයකි (මෙය ජැන්ගෝ ස්ථාපනය කිරීමට වඩා ප්‍රයෝජනවත් වුවද)


1
Virtualenv එහි අඩවි පැකේජ සොයා ගැනීමට ක්‍රමයක් සපයන්නේද?
ඩැරල් ස්පිට්සර්

10
cdsitepackagesපරිසරයේ අඩවි පැකේජ නාමාවලියට කෙලින්ම වෙනස් කිරීමට ඔබට විධානය ඇති virtualenvwrapper භාවිතා කළ හැකිය .
john2x

6
IotPiotrDobrogost: ලයිනක්ස් හි වර්චුවලෙන්ව් එකක පයිතන් 2.7 හි මා වෙනුවෙන් වැඩ කරයි
රිච්වෙල්

2
පළමු අදහස් දැක්වීම තවදුරටත් අදාළ නොවේ: මෙය වර්චුවලෙන්ව් එකකින් පිටත හා ඇතුළත නිවැරදි ස්ථානය පෙන්වයි.
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

මෙම ෆෝල්ඩරයේ අඩංගු වන්නේ වැඩසටහන් ක්‍රියාත්මක කිරීම සඳහා ඔබේ මෙහෙයුම් පද්ධතිය ස්වයංක්‍රීයව ස්ථාපනය කර ඇති පැකේජ පමණි.

උබුන්ටු හි , 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 pipඔබ ඔබේ ම බෙදාහැරීමේ කිරීමට තීරණය නම් උබුන්ටු මත: ඔබ භාවිතා කරන්නේ නම් sudo pipඑය තහවුරු වත්මන් හා සියලු පරායත්තයන් බව ගැනීමට ඔබගේ වගකීම වේ, අනාගත පිඹුරා මොඩියුල හරහා ස්ථාපනය sudo aptහෝ sudo pipඅනුකූල වේ. විසඳීම virtualenvසඳහා නිර්මාණය කරන ලද ගැටළුව
jfs

dist-packages(එල්) උබුන්ටු හි 2 හි වෙනස්කම් තේරුම් ගැනීමට පැහැදිලි පැහැදිලි කිරීමක් .
ටිමෝ

69

මෙය මට වැඩ කළේ:

python -m site --user-site

15
මට නම් මෙය නොපවතින ෆෝල්ඩරයකට යොමු කරයි ( ~/.local/lib/python2.7/site-packages).
නීල් ට්‍රැෆ්ට්

1
ඕඑස් එක්ස් මේවරික්ස් හි, මගේ නිවස .ලොකල් යනු මට එය සොයා ගැනීමට අවශ්‍ය දේ නොවේ.
radtek

එය මගේ ප්‍රධාන / පුස්තකාල ෆෝල්ඩරයේ අතින් ගමන් කිරීමට සිදුවිය, කිසියම් හේතුවක් නිසා full ජු පූර්ණ මාර්ගය ක්‍රියාත්මක නොවීය
efwjames

මෙහි ස්ථාපනය කර ඇති පැකේජ භාවිතා කරන්නේ කෙසේද? මම virtualenvඑය කළහොත් පැකේජය නොපවතින බවට පැමිණිලි කරයි. අභිරුචි ස්ථානයක ස්ථාපනය කර ඇති පැකේජ ඉල්ලා සිටින්නේ කෙසේද?
AbtPst

2
පරිශීලක විශේෂිත පැකේජ සඳහා පයිතන් සොයන්නේ කොතැනින්දැයි මෙය ඔබට කියයි. "නොපවතින" සහ "මට එය සොයා ගැනීමට අවශ්‍ය දේ නොවේ" වැනි අදහස් මෙම සන්දර්භය තුළ තේරුමක් නැත.
අවංක අබේ

28

අපි කියමු ඔබ 'ජැන්ගෝ' පැකේජය ස්ථාපනය කර ඇති බව. එය ආනයනය කර 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 >>> මුද්රිත pg .__ path__ Traceback (වඩාත් ම මෑත ඇමතුමක් අන්තිම) ගොනුව: "<stdin>", රේඛීය 1, <මොඩියුලය> AttributeError දී 'මොඩියුලය' වස්තුව කිසිදු විශේෂණය 'ඇත මාර්ගය '
Dannid

එය ක්‍රියා කරයි, මට PYDEV මාර්ගයට එක් කිරීමට sklearn පැකේජය සොයා ගැනීමට අවශ්‍යයි, ස්තූතියි.
බර්කේ

django.__file__මේ සඳහා භාවිතා කරන්න __path__. සහ, නැත, මෙය අඩවි පැකේජ සමඟ කිසිදු සම්බන්ධයක් ඇති බවට සහතිකයක් නොවේ, නමුත් ඔබ බොහෝ විට නල ස්ථාපනය කර ඇති ජැන්ගෝ වැනි දේ සමඟ, ඔබ කඩිමුඩියේ සිටින විට එය කරනු ඇති අතර එය භාවිතා කළ හැකිය වෙනත් අරමුණු සඳහාද (උදාහරණයක් ලෙස ගොනු පද්ධතියෙන් පෙරනිමි වින්‍යාස ගොනුවක් කියවීම).
ජේ.එල්. පයිරෙට්

මෙම සහ වෙනත් පිළිතුරු මත පදනම්ව ඔබේ foo.barපැකේජයට මාර්ගය ලබා ගැනීම සඳහා විධාන රේඛාවේ සිට එක් පේළියකින් මෙය කළ හැකිය :python -c "import foo.bar as _; print(_.__path__[0])"
snark

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 ස්ථාපනය සඳහා ක්‍රියා කරනු ඇති අතර, ඔබේ වැඩසටහන ඔබේ පයිතන්පාත් සම්පූර්ණයෙන්ම පරිශීලක-දේශීය වන වර්චුවලෙන්ව් එකක ක්‍රියාත්මක විය හැක, එබැවින් එය පද්ධති අඩවි පැකේජ සෘජුවම භාවිතා කිරීම උපකල්පනය නොකළ යුතුය.


3
python2වර්චාලෙන්ව් සමඟ සහ නැතිව ඔක්ස් සහ උබුන්ටු සමඟ විශ්වාසදායක ලෙස ක්‍රියා කරයි python3.
ජිටර්

2
2008 ටික කලකට පෙර - මෙම පිළිතුර පයිතන් 3.0 නිකුත් කිරීමට මාස තුනකට පෙරය.
චාල්ස් ඩෆි

විශ්වාසයි, නමුත් අද මගේ අදහස ප්‍රයෝජනවත් විය හැකිය. වැරදියි නම් මාව නිවැරදි කරන්න. තව දුරටත්, මම මෙම පිළිතුර හෝ වෙනත් කිසිවක් සම්බන්ධයෙන් පහත් කොට සැලකුවේ නැත python3.
ජිටර්

23

නවීන stdlib ක්‍රමයක් වන්නේ sysconfigමොඩියුලය භාවිතා කිරීමයි , එය 2.7 සහ 3.2+ අනුවාද වලින් ලබා ගත හැකිය.

සටහන : sysconfig( මූලාශ්‍රය ) මෙහි තවත් පිළිතුරු කිහිපයක සඳහන් කර ඇති උප distutils.sysconfigමොඩියුලය ( ප්‍රභවය ) සමඟ පටලවා නොගත යුතුය . දෙවැන්න මුළුමනින්ම වෙනස් මොඩියුලයක් වන අතර එය get_pathsපහත සාකච්ඡා කර ඇති ක්‍රියාකාරීත්වයේ අඩුවක් නැත .

පයිතන් දැනට මාර්ග අටක් ( ලියකියවිලි ) භාවිතා කරයි :

  • stdlib : වේදිකාවට විශේෂිත නොවන සම්මත පයිතන් පුස්තකාල ගොනු අඩංගු නාමාවලිය.
  • Platstdlib : වේදිකාවට විශේෂිත වූ සම්මත පයිතන් පුස්තකාල ගොනු අඩංගු නාමාවලිය.
  • Platlib : අඩවි-විශේෂිත, වේදිකා-විශේෂිත ගොනු සඳහා නාමාවලිය.
  • purelib : අඩවි විශේෂිත, වේදිකා නොවන විශේෂිත ගොනු සඳහා නාමාවලිය.
  • ඇතුළත් කරන්න : වේදිකා නොවන විශේෂිත ශීර්ෂ ගොනු සඳහා නාමාවලිය.
  • Platinclude : වේදිකා විශේෂිත ශීර්ෂ ගොනු සඳහා නාමාවලිය.
  • ස්ක්‍රිප්ට් : ස්ක්‍රිප්ට් ගොනු සඳහා නාමාවලිය.
  • දත්ත : දත්ත ගොනු සඳහා නාමාවලිය.

බොහෝ අවස්ථාවන්හීදී, මෙම ප්‍රශ්නය සොයා ගන්නා පරිශීලකයින් 'පිරිසිදු ලිබ්' මාර්ගය ගැන උනන්දු වනු ඇත ( සමහර අවස්ථාවල ඔබ 'ප්ලැට්ලිබ්' ගැන ද උනන්දු විය හැකිය). දැනට පිළිගත් පිළිතුර මෙන් නොව, ඔබ සතුව 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'

Venv සමඟ, ඔබට මේ වගේ දෙයක් ලැබෙනු ඇත

>>> 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.
eudoxos

මෙම ප්‍රශ්නයට පහසුවෙන්ම හොඳම පිළිතුර! ඔබට ස්තුතියි. මා අතුරුදහන් වූ එකම දෙය නම් ආනයන ප්‍රකාශයක් හමු වූ විට මෙම ස්ථාන පරීක්ෂා කරන ඇණවුමයි. එසේම, පයිතන් පටවන විට මෙම ස්ථානවලින් කිසිවක් පූර්ව සෙවූ / හැඹිලිගත කර තිබේද? එය දැන ගැනීම ද ප්‍රයෝජනවත් 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 / local / bin /

නැතහොත් පයිතන් පැකේජ ඇති සියලුම මාර්ග ලැයිස්තුගත කිරීම සඳහා කෙනෙකුට පහත විධානය ලිවිය හැකිය.

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

සටහන: 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']

මට නිවැරදිව මතක නම්, dist-packages ඩෙබියන් සඳහා විශේෂිත වන අතර ව්‍යුත්පන්න වේ.
සැමුවෙල්

1
Am සාමුවෙල්සන්තනා ඔබ නිවැරදිය. dist-packages ඩෙබියන් පදනම් කරගත් පද්ධති සඳහා විශේෂිත වේ. මෙම අවස්ථාවෙහිදී මම site.getsitepackages()පද්ධති ස්ථාපනයෙන් ආයාචනා කර ඇති අතර එම නිසා dist-packages, වෙනත් ස්ථාපනයන් අඩවි පැකේජ පෙන්වනු ඇත.
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 පෙන්වයි. උබුන්ටු මත වැඩ කරන අතර ඉහත ඒවා නොකෙරේ. කවුළු හෝ වෙනත් දුර ගැන මාගෙන් විමසන්න එපා, නමුත් එය පෙරනිමියෙන් පහසු_ඉන්ස්ටෝල් භාවිතා කරන එකම ඩිර් බැවින්, පහසු_ඉන්ස්ටෝල් වැඩ කරන සෑම තැනකම එය නිවැරදි විය හැකිය (එබැවින් සෑම තැනකම මැක්ස් පවා). විනෝද වන්න. සටහන: මුල් කේතයේ බොහෝ දිවුරුම් වචන ඇත.


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 ගේ නිර්මාණය කිරීම සඳහා භාවිතා වෙබ් අඩවිය පැකේජ .
Piotr Dobrogost

3
@Piotr එය බොහෝ විට distutils.sysconfig හි දෝෂයකි. මම බලාපොරොත්තු වූ පරිදි අභ්‍යන්තර අඩවි පැකේජ ලබා ගනිමි.
ටෝබු

ලිනක්ස් හි වර්චුවලෙන්ව් එකක ස්ථාපනය කර ඇති පයිතන් 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

අථත්ය පරිසරය තුළ සහ ඉන් පිටත ඇති සියලුම බෙදාහැරීම් වල "අඩු තාක්‍ෂණික" ස්වභාවය නිසා මෙය ක්‍රියාත්මක විය යුතුය. OS මොඩියුලය සැමවිටම 'අඩවි පැකේජ' වල මව් නාමාවලියෙහි වාසය කරයි

import os; print(os.path.dirname(os.__file__) + '/site-packages')

අඩවි පැකේජ වලට dir වෙනස් කිරීම සඳහා මම පහත අන්වර්ථය භාවිතා කරමි (* නික්ස් පද්ධති මත):

alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'

10

get_python_libදැනටමත් සඳහන් කර ඇති ශ්‍රිතයට අමතර සටහනක් : සමහර වේදිකාවල වේදිකා විශේෂිත මොඩියුල සඳහා විවිධ නාමාවලි භාවිතා කරනු ලැබේ (උදා: සම්පාදනය අවශ්‍ය මොඩියුල). ඔබ plat_specific=Trueශ්‍රිතය වෙත ගියහොත් වේදිකා විශේෂිත පැකේජ සඳහා අඩවි පැකේජ ලබා ගනී.




4

පයිප්ප ස්ථාපනය කරන ස්ථානය තීරණය කිරීමට ඔබ මෙම විධානය උත්සාහ කළ යුතුය

පයිතන් 2

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

පයිතන් 3

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

3

පැරණි ප්‍රශ්නයට පිළිතුර. නමුත් මේ සඳහා ipython භාවිතා කරන්න.

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

1
මෙය අඩවි පැකේජ නාමාවලිය නොව පැකේජය ස්ථාපනය කර ඇති නාමාවලියයි. මෙයද ප්‍රයෝජනවත් වන්නේ ඔබ iPython භාවිතා කරන්නේ නම් සහ ක්‍රමලේඛගතව ස්ථාපන නාමාවලියක් ලබා ගැනීමට නොහැකි වීම සඳහා පමණි.
danielunderwood

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))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.