Sự khác biệt giữa các gói dist và gói trang web là gì?


243

Tôi hơi khó hiểu trong quá trình cài đặt gói python. Cụ thể, sự khác biệt giữa các gói được cài đặt trong thư mục dist-gói và thư mục gói-gói là gì?

Câu trả lời:


226

các gói dist là một quy ước dành riêng cho Debian cũng có trong các dẫn xuất của nó, như Ubuntu. Các mô-đun được cài đặt cho các gói xa khi chúng đến từ trình quản lý gói Debian vào vị trí này:

/usr/lib/python2.7/dist-packages

easy_installpipđược cài đặt từ trình quản lý gói, họ cũng sử dụng các gói dist, nhưng họ đặt các gói ở đây:

/usr/local/lib/python2.7/dist-packages

Từ Wiki Python Debian :

gói dist thay vì gói trang web. Phần mềm Python của bên thứ ba được cài đặt từ các gói Debian đi vào các gói dist, không phải gói trang. Điều này là để giảm xung đột giữa Python hệ thống và mọi bản dựng Python từ nguồn bạn có thể cài đặt thủ công.

Điều này có nghĩa là nếu bạn tự cài đặt Python từ nguồn, nó sẽ sử dụng thư mục gói trang. Điều này cho phép bạn tách riêng hai cài đặt, đặc biệt là khi Debian và Ubuntu dựa vào phiên bản hệ thống của Python cho nhiều tiện ích hệ thống.


22
Nó thật sự đúng?! Tôi cài đặt với pip và nó đi đến các gói dist. (trên Deb Squeeze + Py 2.6)
Basel Shishani

4
Tôi cũng vậy. Các gói được cài đặt với pip hoặc easy_install đều đi vào các gói dist.
monostop

1
Tương tự ở đây, tôi có gặp vấn đề gì không nếu tôi gỡ bỏ tất cả các cài đặt đó?
Mohamed Turki

1
Các thư mục tương tự cho Debian 6.0.10 (vẫn trên Python 2.6).
ᴠɪɴᴄᴇɴᴛ

2
Nếu bạn sử dụng virtualenv với pip, pip sẽ cài đặt các gói trong thư mục gói trang .
diabloneo

4

dist-packageslà thư mục dành riêng cho debian nơi aptbạn bè cài đặt nội dung của họ và site-packagespipthư mục chuẩn .

Vấn đề là - điều gì xảy ra khi các phiên bản khác nhau của cùng một gói có mặt trong các thư mục khác nhau?

Giải pháp của tôi cho vấn đề này là tạo dist-packagesmột liên kết tượng trưng đến site-packages:

for d in $(find $WORKON_HOME -type d -name dist-packages); do
  pushd $d
  cd ..
  if test -d dist-packages/__pycache__; then
    mv -v dist-packages/__pycache__/* site-packages/__pycache__/
    rmdir -v dist-packages/__pycache__
  fi
  mv -v dist-packages/* site-packages/
  rmdir -v dist-packages
  ln -sv site-packages dist-packages
  popd
done

(nếu bạn không sử dụng công cụ gnu, hãy xóa -vtùy chọn).


1
Tôi hơi bối rối về vấn đề mà bạn giải quyết với giải pháp của mình vì câu hỏi yêu cầu một lời giải thích
Jürgen K.

@ JürgenK.: Vấn đề đối với tôi là gói nào được sử dụng khi có các phiên bản khác nhau trong các thư mục khác nhau.
sds
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.