Co to jest katalog pakietów witryn w języku Python?


119

Katalog site-packagesjest wymieniany w różnych artykułach związanych z Pythonem. Co to jest? Jak tego użyć?

Odpowiedzi:


72

site-packagesjest katalogiem docelowym ręcznie tworzonych pakietów Pythona. Kiedy budujesz i instalujesz pakiety Pythona ze źródła (używając distutils , prawdopodobnie przez wykonanie python setup.py install), site-packagesdomyślnie znajdziesz zainstalowane moduły .

Istnieją standardowe lokalizacje:

  • Unix (czysty) 1 :prefix/lib/pythonX.Y/site-packages
  • Unix (nieczysty): exec-prefix/lib/pythonX.Y/site-packages
  • Okna: prefix\Lib\site-packages

1 Pure oznacza, że ​​moduł używa tylko kodu Pythona. Nieoczyszczony może również zawierać kod C / C ++.

site-packagesjest domyślnie częścią ścieżki wyszukiwania Pythona , więc zainstalowane tam moduły mogą być później łatwo importowane.


Przydatna lektura


10
lokalizacja zdarzyła się /usr/local/lib/python3.6/site-packagesna ubuntu
mehmet

Widziałem systemy Gentoo z tym w lib64!
MultipleMonomials

2
czy conda lub pip są instalowane w pakietach witryn, czy po prostu ręcznie budowane pakiety?
Monica Heddneck

2
Naprawdę interesujące pytanie brzmi: dlaczego ten katalog? Dlaczego po prostu nie zainstalować /usr/lib/python3.6?
Torsten Bronger

40

Gdy używasz --useropcji z pip , pakiet zostanie zainstalowany w folderze użytkownika zamiast w folderze globalnym i nie będziesz musiał uruchamiać polecenia pip z uprawnieniami administratora.

Lokalizację folderu pakietów użytkownika można znaleźć za pomocą:

python -m site --user-site

Spowoduje to wydrukowanie czegoś takiego:

C:\Users\%USERNAME%\AppData\Roaming\Python\Python35\site-packages

Jeśli nie używasz --useropcji z pip , pakiet zostanie zainstalowany w folderze globalnym podanym przez:

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

Spowoduje to wydrukowanie czegoś takiego:

['C:\\Program Files\\Anaconda3', 'C:\\Program Files\\Anaconda3\\lib\\site-packages'

Uwaga: powyższe wydrukowane wartości dotyczą systemu Windows 10 z zainstalowanym programem Anaconda 4.x z ustawieniami domyślnymi.


24

site-packages to tylko lokalizacja, w której Python instaluje swoje moduły.

Nie trzeba go „znaleźć”, Python sam wie, gdzie go znaleźć, ta lokalizacja jest zawsze częścią PYTHONPATH (sys.path).

Programowo możesz to znaleźć w ten sposób:

import sys
site_packages = next(p for p in sys.path if 'site-packages' in p)
print site_packages

„/Users/foo/.envs/env1/lib/python2.7/site-packages”


3
Prawdopodobnie łatwiejsze do zaimportowania witryny niż site.getsitepackages ()
JSharm

1
Nie wszystkie dystrybucje Pythona mają site-packages, a to wzrośnie StopIteration. Na przykład Debian (i Ubuntu) muszą dist-packageszainstalować swoje rozproszone moduły.
Mike T

Jeśli używasz virtualenv i nie dziedziczysz pakietów globalnych, to zawsze będzie działać. Nigdy nie koduję bez virtualenv
Anthony Perot
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.