Answers:
ගෝලීය සහ එක් පරිශීලකයෙකුට අඩවි පැකේජ නාමාවලි වර්ග දෙකක් තිබේ .
ඔබ ක්රියාත්මක වන විට ගෝලීය අඩවි පැකේජ (" 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"])'
මෙම පරිශීලක අනුව වෙබ් අඩවිය පැකේජ ඩිරෙක්ටරිය ( පී 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
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')
පසුව වෙබ් අඩවි පැකේජයන් තීව්ර ලෙස තීරණය කරමි. [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
පරිසරයේ අඩවි පැකේජ නාමාවලියට කෙලින්ම වෙනස් කිරීමට ඔබට විධානය ඇති virtualenvwrapper භාවිතා කළ හැකිය .
/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
මෙම ෆෝල්ඩරයේ අඩංගු වන්නේ වැඩසටහන් ක්රියාත්මක කිරීම සඳහා ඔබේ මෙහෙයුම් පද්ධතිය ස්වයංක්රීයව ස්ථාපනය කර ඇති පැකේජ පමණි.
උබුන්ටු හි , 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
ඔබ ඔබේ ම බෙදාහැරීමේ කිරීමට තීරණය නම් උබුන්ටු මත: ඔබ භාවිතා කරන්නේ නම් sudo pip
එය තහවුරු වත්මන් හා සියලු පරායත්තයන් බව ගැනීමට ඔබගේ වගකීම වේ, අනාගත පිඹුරා මොඩියුල හරහා ස්ථාපනය sudo apt
හෝ sudo pip
අනුකූල වේ. විසඳීම virtualenv
සඳහා නිර්මාණය කරන ලද ගැටළුව
dist-packages
(එල්) උබුන්ටු හි 2 හි වෙනස්කම් තේරුම් ගැනීමට පැහැදිලි පැහැදිලි කිරීමක් .
මෙය මට වැඩ කළේ:
python -m site --user-site
~/.local/lib/python2.7/site-packages
).
virtualenv
එය කළහොත් පැකේජය නොපවතින බවට පැමිණිලි කරයි. අභිරුචි ස්ථානයක ස්ථාපනය කර ඇති පැකේජ ඉල්ලා සිටින්නේ කෙසේද?
අපි කියමු ඔබ 'ජැන්ගෝ' පැකේජය ස්ථාපනය කර ඇති බව. එය ආනයනය කර 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__
. සහ, නැත, මෙය අඩවි පැකේජ සමඟ කිසිදු සම්බන්ධයක් ඇති බවට සහතිකයක් නොවේ, නමුත් ඔබ බොහෝ විට නල ස්ථාපනය කර ඇති ජැන්ගෝ වැනි දේ සමඟ, ඔබ කඩිමුඩියේ සිටින විට එය කරනු ඇති අතර එය භාවිතා කළ හැකිය වෙනත් අරමුණු සඳහාද (උදාහරණයක් ලෙස ගොනු පද්ධතියෙන් පෙරනිමි වින්යාස ගොනුවක් කියවීම).
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 ස්ථාපනය සඳහා ක්රියා කරනු ඇති අතර, ඔබේ වැඩසටහන ඔබේ පයිතන්පාත් සම්පූර්ණයෙන්ම පරිශීලක-දේශීය වන වර්චුවලෙන්ව් එකක ක්රියාත්මක විය හැක, එබැවින් එය පද්ධති අඩවි පැකේජ සෘජුවම භාවිතා කිරීම උපකල්පනය නොකළ යුතුය.
python2
වර්චාලෙන්ව් සමඟ සහ නැතිව ඔක්ස් සහ උබුන්ටු සමඟ විශ්වාසදායක ලෙස ක්රියා කරයි python3
.
python3
.
නවීන 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
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 / 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']
site.getsitepackages()
පද්ධති ස්ථාපනයෙන් ආයාචනා කර ඇති අතර එම නිසා dist-packages, වෙනත් ස්ථාපනයන් අඩවි පැකේජ පෙන්වනු ඇත.
සියලුම පිළිතුරු (හෝ: එකම පිළිතුර නැවත නැවතත් පුනරාවර්තනය වේ) ප්රමාණවත් නොවේ. ඔබට කිරීමට අවශ්ය වන්නේ මෙයයි:
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
අතර එය ප්රමාණවත් නොවන්නේ නම් එය අසාර්ථක නොවේ :)
පැති සටහනක්: 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']
අථත්ය පරිසරය තුළ සහ ඉන් පිටත ඇති සියලුම බෙදාහැරීම් වල "අඩු තාක්ෂණික" ස්වභාවය නිසා මෙය ක්රියාත්මක විය යුතුය. 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'
get_python_lib
දැනටමත් සඳහන් කර ඇති ශ්රිතයට අමතර සටහනක් : සමහර වේදිකාවල වේදිකා විශේෂිත මොඩියුල සඳහා විවිධ නාමාවලි භාවිතා කරනු ලැබේ (උදා: සම්පාදනය අවශ්ය මොඩියුල). ඔබ plat_specific=True
ශ්රිතය වෙත ගියහොත් වේදිකා විශේෂිත පැකේජ සඳහා අඩවි පැකේජ ලබා ගනී.
පයිප් ෂෝ මඟින් පැකේජයක් පිළිබඳ සියලු විස්තර ලබා දෙනු ඇත: https://pip.pypa.io/en/stable/reference/pip_show/ [pip show] [1]
ස්ථානය ලබා ගැනීම සඳහා:
pip show <package_name>| grep Location
from distutils.sysconfig import get_python_lib
print get_python_lib()
පයිප්ප ස්ථාපනය කරන ස්ථානය තීරණය කිරීමට ඔබ මෙම විධානය උත්සාහ කළ යුතුය
පයිතන් 2
pip show six | grep "Location:" | cut -d " " -f2
පයිතන් 3
pip3 show six | grep "Location:" | cut -d " " -f2
පැරණි ප්රශ්නයට පිළිතුර. නමුත් මේ සඳහා 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
මා වැඩ කරමින් සිටි ව්යාපෘතියක් සඳහා තරමක් වෙනස් දෙයක් කිරීමට මට සිදු විය: මූලික ස්ථාපන උපසර්ගයට සාපේක්ෂව අඩවි-පැකේජ නාමාවලිය සොයා ගන්න . අඩවි පැකේජ ෆෝල්ඩරය තිබුනේ නම් /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>