Thư mục gói trang web của python là gì?


119

Thư mục site-packagesđược đề cập trong các bài báo liên quan đến Python. Nó là gì? Làm thế nào để sử dụng nó?

Câu trả lời:


72

site-packagesthư mục đích của các gói Python được xây dựng thủ công. Khi bạn xây dựng và cài đặt các gói Python từ nguồn (sử dụng các bản phân phối , có thể bằng cách thực thi python setup.py install), bạn sẽ tìm thấy các mô-đun được cài đặt site-packagestheo mặc định.

Có các vị trí tiêu chuẩn:

  • Unix (thuần túy) 1 :prefix/lib/pythonX.Y/site-packages
  • Unix (không thuần túy): exec-prefix/lib/pythonX.Y/site-packages
  • Các cửa sổ: prefix\Lib\site-packages

1 Pure có nghĩa là mô-đun chỉ sử dụng mã Python. Không thuần túy cũng có thể chứa mã C / C ++.

site-packagestheo mặc định là một phần của đường dẫn tìm kiếm Python , vì vậy các mô-đun được cài đặt ở đó có thể được nhập dễ dàng sau đó.


Đọc hữu ích


10
vị trí đã xảy ra /usr/local/lib/python3.6/site-packagestrên ubuntu
mehmet

Tôi đã thấy hệ thống Gentoo có nó lib64!
MultipleMonomials

2
conda hoặc pip có cài đặt vào các gói trang web hay chỉ là các gói được xây dựng thủ công?
Monica Heddneck

2
Câu hỏi thực sự thú vị là: Tại sao lại có thư mục này? Tại sao không chỉ cài đặt để /usr/lib/python3.6?
Torsten Bronger

40

Khi bạn sử dụng --usertùy chọn với pip , gói sẽ được cài đặt trong thư mục của người dùng thay vì thư mục chung và bạn sẽ không cần phải chạy lệnh pip với đặc quyền của quản trị viên.

Vị trí của thư mục gói của người dùng có thể được tìm thấy bằng cách sử dụng:

python -m site --user-site

Điều này sẽ in một cái gì đó như:

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

Khi bạn không sử dụng --usertùy chọn với pip , gói sẽ được cài đặt trong thư mục chung do:

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

Điều này sẽ in một cái gì đó như:

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

Lưu ý: Các giá trị in trên dành cho Trên Windows 10 có cài đặt Anaconda 4.x với các giá trị mặc định.


24

gói trang chỉ là vị trí mà Python cài đặt các mô-đun của nó.

Không cần phải "tìm nó", python tự biết tìm nó ở đâu, vị trí này luôn là một phần của PYTHONPATH (sys.path).

Theo chương trình, bạn có thể tìm thấy nó theo cách này:

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
Có lẽ dễ dàng hơn để nhập trang web sau đó site.getsitepackages ()
JSharm

1
Không phải tất cả các bản phân phối Python đều có site-packages, và điều này sẽ tăng lên StopIteration. Ví dụ, Debian (và Ubuntu) phải dist-packagescài đặt các mô-đun phân tán của chúng.
Mike T

Nếu bạn sử dụng virtualenv và không kế thừa các gói toàn cầu thì điều này sẽ luôn hoạt động. Tôi không bao giờ mã mà không một virtualenv
Anthony Perot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.