Python’da genel ve kullanıcı olmak üzere iki tür site paketi dizini bulunur.
- Genel site-paketleri (“dist paketleri“)
sys.path
ile listelenir
python -m site
Python kodu ile site modülünden çalıştırılan daha kısa bir liste için ise getsitepackages
kullanılabilir:
python -c 'import site; print(site.getsitepackages())'
Not: getsitepackages Virtualenvs ile mevcut değil. Yine de yukarıdaki kod virtualenv’in site paketleri dizinini doğru bir şekilde listeler. Python 3’te bunun yerine sysconfig modülini kullanabilir:sys.path
python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])'
2. Kullanıcı site paketleri dizini (PEP 370) ise, Python’un yerel paketlerinizi yüklediği yerdir:
python -m site --user-site
Bu komut varolmayan bir dizine işaret ediyorsa Python çıktısını denetleyin ve açıklamalar için bakın: python -m site --help
İpucu: pip list --user
veya pip freeze --user
kullanıcı için yüklenen tüm site paketlerinin listesini verir.
Python’da spesifik bir paketin yüklendiği dizin nasıl bulunur?
<package>.__path__
belirli bir paketin konumlarını tanımlamanızı sağlar:
$ python -c "import setuptools as _; print(_.__path__)"
['/usr/lib/python2.7/dist-packages/setuptools']
Python’da spesifik bir modülün yüklendiği dizin nasıl bulunur?
<module>.__file__
belirli bir modülün konumunu belirlemenizi sağlar:
$ python3 -c "import os as _; print(_.__file__)"
/usr/lib/python3.6/os.py
Debian stili paket bilgilerini göstermek için ise pip show <package>
komutunu çalıştırın:
$ 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
Sanal ortamdan bağımsız site-paket konumu nasıl bulunur?
stdlib yolu ile, sürüm 2.7 ve 3.2+’da bulunan sysconfig
modülünü kullanabiliriz. Bu yöntem etkin bir sanal ortamınız olup olmadığına bakılmaksızın çalışır.
Python şu anda sekiz yol kullanıyor (dokümanlar):
- stdlib: platforma özgü olmayan standart Python kitaplık dosyalarını içeren dizin.
- platstdlib: platforma özgü standart Python kitaplık dosyalarını içeren dizin.
- platlib: siteye özgü, platforma özgü dosyalar için dizin.
- purelib: siteye özgü, platforma özgü olmayan dosyalar için dizin.
- include: platforma özgü olmayan üstbilgi dosyaları için dizin.
- platinclude: platforma özgü üstbilgi dosyaları için dizin.
- komut dosyaları: komut dosyası dosyaları için dizin. (script)
- veri: veri dosyaları için dizin. (data)
Çoğu kullanıcı ‘purelib’ yolu ile ilgilenecektir (bazı durumlarda, ‘platlib’ ile de ilgilenebilirsiniz). Bu yol, sıradan Python paketlerinin pip
gibi araçlarla yüklanaceği yerdir.
Sistem düzeyinde şöyle bir şey görürsünüz:
# Linux
$ python3 -c "import sysconfig; print(sysconfig.get_path('purelib'))"
/usr/local/lib/python3.8/site-packages
# macOS (brew installed python3.8)
$ python3 -c "import sysconfig; print(sysconfig.get_path('purelib'))"
/usr/local/Cellar/python@3.8/3.8.3/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages
# Windows
C:\> py -c "import sysconfig; print(sysconfig.get_path('purelib'))"
C:\Users\wim\AppData\Local\Programs\Python\Python38\Lib\site-packages
Bir venv ile, böyle bir şey elde edersiniz
# Linux
/tmp/.venv/lib/python3.8/site-packages
# macOS
/private/tmp/.venv/lib/python3.8/site-packages
# Windows
C:\Users\wim\AppData\Local\Temp\.venv\Lib\site-packages
sysconfig.get_paths()
işlevi, Linux’ta örnek olarak ilgili tüm yükleme yollarının bir kısmını döndürür:
>>> import sysconfig
>>> sysconfig.get_paths()
{'stdlib': '/usr/local/lib/python3.8',
'platstdlib': '/usr/local/lib/python3.8',
'purelib': '/usr/local/lib/python3.8/site-packages',
'platlib': '/usr/local/lib/python3.8/site-packages',
'include': '/usr/local/include/python3.8',
'platinclude': '/usr/local/include/python3.8',
'scripts': '/usr/local/bin',
'data': '/usr/local'}
Modül olarak çağırılabilecek bir kabuk komut dosyası da bulunur: sysconfig
python -m sysconfig