Tại sao sử dụng pip trên easy_install? [đóng cửa]


936

Một tweet đọc:

Đừng sử dụng easy_install, trừ khi bạn thích tự đâm vào mặt mình. Sử dụng pip.

Tại sao sử dụng pip trên easy_install? Không phải lỗi nằm ở PyPI và hầu hết các tác giả ? Nếu một tác giả tải tarball nguồn crap (ví dụ: các tệp bị thiếu, không có setup.py) lên PyPI, thì cả pip và easy_install sẽ thất bại. Khác với sự khác biệt về mỹ phẩm, tại sao người Python (như trong tweet trên) dường như rất thích pip hơn easy_install?

(Giả sử rằng chúng ta đang nói về easy_install từ gói Phân phối, được duy trì bởi cộng đồng)


74
Trước khi tôi thấy câu hỏi này, tôi đã trả lời một câu hỏi không liên quan bằng cách nói "không sử dụng easy_install, sử dụng pip". Bây giờ tôi đang tự hỏi tại sao tôi lại nói vậy ...
Daniel Roseman

21
Tôi vẫn chạy vào các gói khiến pip bị lỗi nhưng easy_install xử lý tốt, vì vậy tôi cũng tò mò về điều này.
kwatford

5
pyobjc-core là một ví dụ về gói hoạt động với easy_install nhưng không phải với pip.
Marc Abramowitz

5
Trở lại với trăn bốn năm sau, tình trạng của bao bì bị rối tung. Đó là năm 2014 và nó chỉ trở nên tồi tệ hơn. Từ những gì tôi hiểu, setuptools đã hấp thụ các distutils, mặc dù các tài liệu python chính thức không biết gì về điều này, nhưng sẽ không phải là một phần của python 3 , và pip được treo xung quanh như một bánh xe thứ ba (ý định chơi chữ).
Andriy Drozdyuk

3
@drozzy: Bạn tình cờ quay lại vào thời điểm tồi tệ nhất có thể ngay sau khi một nhóm các nhà phát triển cốt lõi quyết định mọi thứ trở nên lộn xộn đến mức họ phải tham gia giải quyết vấn đề. setuptoolskhông phải là một phần của Python 3 bởi vì pip, và đó là phần duy nhất người dùng cuối cần. (Và các nhà phát triển muốn phân phối trên PyPI rõ ràng có thể pip install setuptoolsvà mọi thứ khác họ có thể muốn.)
abarnert

Câu trả lời:


304

Nhiều câu trả lời ở đây đã hết hạn cho năm 2015 (mặc dù câu trả lời ban đầu được chấp nhận từ Daniel Roseman là không). Đây là tình trạng hiện tại của mọi thứ:

  • Các gói nhị phân hiện được phân phối dưới dạng bánh xe ( .whltệp) chỉ không có trên PyPI, nhưng trong các kho lưu trữ của bên thứ ba như Gói mở rộng của Christoph Gohlke cho Windows . pipcó thể xử lý bánh xe; easy_installkhông thể.
  • Các môi trường ảo (được tích hợp sẵn với 3,4 hoặc có thể được thêm vào 2.6 + / 3.1 + với virtualenv) đã trở thành một công cụ rất quan trọng và nổi bật (và được đề xuất trong các tài liệu chính thức ); chúng bao gồm pipngoài hộp, nhưng thậm chí không hoạt động đúng easy_install.
  • Các distributegói bao gồm easy_installkhông còn được duy trì. Những cải tiến của nó setuptoolsđã được sáp nhập trở lại setuptools. Cố gắng cài đặt distributesẽ chỉ cài đặt setuptoolsthay thế.
  • easy_install bản thân nó chỉ được duy trì
  • Tất cả các trường hợp trước đây pipkhông thua kém gì khi easy_installcài đặt cài đặt từ cây nguồn đã giải nén, từ repo DVCS, v.v. bạn có thể pip install ., pip install git+https://.
  • pipđi kèm với các gói Python 2.7 và 3.4+ chính thức từ python.org và pipbootstrap được bao gồm theo mặc định nếu bạn xây dựng từ nguồn.
  • Các bit tài liệu không đầy đủ khác nhau về cài đặt, sử dụng và xây dựng các gói đã được thay thế bởi Hướng dẫn sử dụng bao bì Python . Tài liệu riêng của Python về Cài đặt Mô-đun Python bây giờ làm theo hướng dẫn sử dụng này và gọi rõ ràng piplà "chương trình cài đặt ưu tiên".
  • Các tính năng mới khác đã được thêm vào piptrong những năm qua sẽ không bao giờ có trong đó easy_install. Ví dụ, pipgiúp dễ dàng sao chép các gói trang web của bạn bằng cách xây dựng tệp yêu cầu và sau đó cài đặt nó với một lệnh duy nhất ở mỗi bên. Hoặc để chuyển đổi tệp yêu cầu của bạn sang repo cục bộ để sử dụng cho phát triển nội bộ. Và như thế.

Lý do chính đáng duy nhất mà tôi biết sử dụng easy_installtrong năm 2015 là trường hợp đặc biệt sử dụng các phiên bản Python được cài đặt sẵn của Apple với OS X 10.5-10.8. Kể từ ngày 10.5, Apple đã bao gồm easy_install, nhưng đến ngày 10.10 họ vẫn không bao gồm pip. Với 10.9+, bạn vẫn chỉ nên sử dụng get-pip.py, nhưng trong 10.5-10.8, điều này có một số vấn đề, vì vậy nó dễ dàng hơn sudo easy_install pip. (Nói chung, easy_install piplà một ý tưởng tồi; chỉ dành cho OS X 10.5-10.8 mà bạn muốn thực hiện điều này.) Ngoài ra, 10.5-10.8 bao gồm readlinemột cách easy_installbiết cách loại bỏ xung quanh nhưng pipkhông, vì vậy bạn cũng muốn sudo easy_install readlinenếu bạn muốn nâng cấp điều đó


9
@drozzy: Có thể. Nhưng hãy xem xét rằng trong 5 năm nữa, câu trả lời của tôi sẽ lỗi thời như tất cả những người khác, trong khi của Daniel Roseman là vô tận. Ngoài ra, câu trả lời của tôi sẽ không tốt nếu nó không thể dựa vào việc chỉ vào câu trả lời được chấp nhận 5 tuổi cho thấy lý do tại sao cộng đồng Python bị tụt lại piptrong thời gian can thiệp.
abarnert

2
Điều đáng chú ý là một số phiên bản đóng gói của pip bị lỗi và pip không thể tự nâng cấp. Cho dù bạn có coi đó là mỉa mai hay không, trong những trường hợp đó, giải pháp đơn giản nhất là làm easy_install -U piphoặc easy_install3 -U pip.
phân tích

"nhưng thậm chí không hoạt động đúng với easy_install" Đây không phải là kinh nghiệm của tôi, mặc dù tôi đã không thử trong một thời gian vì bánh xe hiện đang chiếm ưu thế. Nhưng nhị phân của Christoph Gohlke từng được phân phối dưới dạng trứng thực thi. Gọi easy_installcho họ là cách duy nhất tôi có thể cài đặt các gói đó vào môi trường ảo và nó không bao giờ khiến tôi bị ợ nóng. Bằng cách nào easy_installkhông còn hoạt động với envs ảo?
jpmc26

599

Từ giới thiệu riêng của Ian Bicking đến pip :

Pip ban đầu được viết để cải thiện easy_install theo các cách sau

  • Tất cả các gói được tải xuống trước khi cài đặt. Kết quả là một phần cài đặt hoàn thành không xảy ra.
  • Chăm sóc được thực hiện để trình bày đầu ra hữu ích trên bàn điều khiển.
  • Các lý do cho hành động được theo dõi. Ví dụ, nếu một gói đang được cài đặt, pip sẽ theo dõi lý do tại sao gói đó được yêu cầu.
  • Thông báo lỗi nên hữu ích.
  • Mã tương đối ngắn gọn và gắn kết, giúp sử dụng lập trình dễ dàng hơn.
  • Các gói không phải được cài đặt dưới dạng lưu trữ trứng, chúng có thể được cài đặt phẳng (trong khi vẫn giữ siêu dữ liệu trứng).
  • Hỗ trợ riêng cho các hệ thống kiểm soát phiên bản khác (Git, Mercurial và Bazaar)
  • Gỡ cài đặt các gói.
  • Đơn giản để xác định các bộ yêu cầu cố định và tái tạo một cách đáng tin cậy một bộ các gói.

63
Ưu điểm "thông báo lỗi" là rất lớn, đặc biệt là đối với người dùng mới. Easy-install nổi tiếng với việc tạo ra hàng tá lỗi trông giống như lỗi nghiêm trọng, chỉ để khắc phục cài đặt thành công, điều này gây khó khăn cho đến khi bạn học cách bỏ qua hầu hết mọi thứ nó nói. Pip chỉ đơn giản là bỏ qua những điều đó ở nơi đầu tiên.
Brandon Rhodes

1
@Glyph có lợi thế khi sử dụng easy_install piphơn sudo apt-get install python-pip?
Dennis

2
Không sử dụng easy_install bên ngoài virtualenv trên các bản phân phối dựa trên gói: workaround.org/easy-install-debian
Federico

11
@Dennis: Khi sử dụng sudo apt-getUbuntu / Debian sẽ cài đặt các gói Python trong /usr/lib/python/dist-packageskhi đó sudo piphoặc sudo easy_installsẽ cài đặt /local/lib/python/site-packagesvà thật không may, các gói Debian / Ubuntu thường có các tên khác nhau mà pip không quen thuộc. Giải pháp tốt nhất IMHO là sử dụng virtualenv và cài đặt pipcác gói của bạn ở đó.
Đánh dấu Mikofski

2
Điều này cần một bản cập nhật.
Andriy Drozdyuk

248

Một lý do khác như một lý do chưa được đề cập đến vì lý do ưu tiên pip là bởi vì đó là độ nóng mới và sẽ tiếp tục được sử dụng trong tương lai.

Infographic dưới đây từ phần Trạng thái đóng gói hiện tại trong Hướng dẫn đóng gói v1.0 của Hitchhiker'sshow mà setuptools / easy_install sẽ biến mất trong tương lai.

nhập mô tả hình ảnh ở đây

Đây là một infographic khác từ tài liệu phân phối cho thấy Setuptools và easy_install sẽ được thay thế bằng phân phốipip độ nóng mới . Trong khi pip vẫn là điểm nóng mới, Phân phối được hợp nhất với Setuptools vào năm 2013 với việc phát hành Setuptools v0.7.

nhập mô tả hình ảnh ở đây


47
Infographics FTW
WineSoaken

34
OTOH, đồ họa thứ hai đã lỗi thời trong một năm. phân phối sẽ đạt đến cuối vòng đời và được thay thế bởi distutils2 (cũng sẽ có trong thư viện chuẩn Python bắt đầu từ 3.3). Một trình cài đặt cơ bản có tên pysetup được cung cấp dưới dạng một phần hoặc distutils2 và pip sẽ tiếp tục cung cấp các tính năng bổ sung trên đỉnh distutils2 trong tương lai.
Éric Araujo

7
omg cảm ơn bạn rất nhiều Tôi đã bị nhầm lẫn bởi bao bì trăn trong nhiều năm và thật xúc động khi thấy một con đường bán chính thức phía trước.
aaron


21
"Câu trả lời" này quá lỗi thời và chỉ sai nó thậm chí không hài hước.
chỉ


116

YÊU CẦU tập tin.

Nghiêm túc, tôi sử dụng kết hợp với virtualenv mỗi ngày.


HƯỚNG DẪN QUẢN LÝ NHANH CHÓNG, FOLKS

Các tệp yêu cầu cho phép bạn tạo một ảnh chụp nhanh của tất cả các gói đã được cài đặt thông qua pip. Bằng cách gói các gói đó trong một môi trường ảo, bạn có thể khiến cơ sở mã của bạn xử lý một bộ gói rất cụ thể và chia sẻ cơ sở mã đó với người khác.

Từ tài liệu của Heroku https://devcenter.heroku.com/articles/python

Bạn tạo một môi trường ảo và đặt shell của bạn để sử dụng nó. (hướng dẫn bash / * nix)

virtualenv env
source env/bin/activate

Bây giờ tất cả các tập lệnh python chạy với shell này sẽ sử dụng các gói và cấu hình của môi trường này. Bây giờ bạn có thể cài đặt một gói cục bộ vào môi trường này mà không cần phải cài đặt nó trên toàn cầu trên máy của bạn.

pip install flask

Bây giờ bạn có thể kết xuất thông tin về các gói được cài đặt với

pip freeze > requirements.txt

Nếu bạn đã kiểm tra tệp đó thành kiểm soát phiên bản, khi người khác nhận được mã của bạn, họ có thể thiết lập môi trường ảo của riêng họ và cài đặt tất cả các phụ thuộc với:

pip install -r requirements.txt

Bất cứ lúc nào bạn có thể tự động hóa tedium như thế này là tuyệt vời.


1
Bây giờ, điều này dường như cũng là một phần của setuptools: pythonhosted.org/setuptools/ Khăn
Andriy Drozdyuk

bạn nên sử dụng pipreqsđể có được tệp tests.txt. Nó sẽ chỉ cung cấp các thư viện liên quan đến dự án nơi bạn đang gọi pipreqs, do đó, tệp.txt.txt sẽ dựa trên dự án chứ không dựa trên virtualenv.
SeF

83

Pip sẽ không cài đặt các gói nhị phân và không được thử nghiệm tốt trên Windows.

Vì Windows không đi kèm với trình biên dịch theo mặc định, pip thường không thể được sử dụng ở đó. easy_install có thể cài đặt các gói nhị phân cho Windows.


3
Thú vị, tôi không bao giờ nghĩ về điều đó. Pip cũng không hỗ trợ các tính năng "bổ sung" của setuptools được sử dụng bởi những người Zope ít nhất.
Sridhar Ratnakumar

1
Có phải đó là một dấu hiệu của việc cần một môi trường gcc trên các cửa sổ, thay vì nhấn mạnh pip cài đặt các nhị phân dựng sẵn?
WineSoaken

18
Trình biên dịch "đúng" được sử dụng cho Windows là Visual Studio (2008 tôi tin cho các phiên bản gần đây của Python). Cài đặt này, ngay cả phiên bản miễn phí, là một rắc rối. Cách thông thường để cài đặt tiện ích mở rộng C trên Windows là từ các tệp nhị phân được biên dịch sẵn. easy_install hỗ trợ này, pip không.
fuzzyman

8
Đây là lý do chính tại sao tôi vẫn sử dụng easy_install.
Randy Syring

14
Trong những năm kể từ khi câu trả lời trên được đưa ra, giờ đây không còn đúng khi pip không thể cài đặt các gói nhị phân, trên Windows hoặc trên các nền tảng khác. Các wheelđịnh dạng phân phối nhị phân làm cho điều đó có thể. Nhiều gói của bên thứ ba với các mô-đun mở rộng C hiện đang được phân phối dưới dạng các bánh xe được chế tạo cho các nền tảng khác nhau và pip có thể tự động cài đặt chúng. Xem, ví dụ, pythonwheels.com
Ned Deily

76

CẬP NHẬT: setuptoolsđã hấp thụ distributetrái ngược với cách khác, như một số người nghĩ. setuptoolsđược cập nhật với những distutilsthay đổi mới nhất và định dạng bánh xe. Do đó, easy_installpip ít nhiều có cùng mức độ hiện tại.

Nguồn: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribution-or-another-name


5
Tại sao điều này không được nâng cao hơn? Các câu trả lời đã quá lỗi thời!
Andriy Drozdyuk

5
vâng, các câu trả lời hàng đầu đã hết thời
WKordos

2
Do đó, easy_install và pip ít nhiều có cùng mức độ hiện tại Điều này là vô nghĩa. easy_installvẫn là những gì nó đã được trong một thời gian dài và pip cải thiện rất nhiều. easy_installchỉ là một phần setuptoolsvà được cho là một trong những điều tồi tệ nhất, đó là lý do tại sao pip nhằm mục đích thay thế nó.
Piotr Dobrogost

25

Ngoài ra để trả lời của fuzzyman:

Pip sẽ không cài đặt các gói nhị phân và không được thử nghiệm tốt trên Windows.

Vì Windows không đi kèm với trình biên dịch theo mặc định, pip thường không thể được sử dụng ở đó. easy_install có thể cài đặt các gói nhị phân cho Windows.

Đây là một mẹo trên Windows:

  • bạn có thể sử dụng easy_install <package>để cài đặt các gói nhị phân để tránh xây dựng nhị phân

  • bạn có thể sử dụng pip uninstall <package>ngay cả khi bạn đã sử dụng easy_install.

Đây chỉ là một công việc xung quanh tôi làm việc trên các cửa sổ. Trên thực tế tôi luôn sử dụng pip nếu không có nhị phân liên quan.

Xem pip doku hiện tại: http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

Tôi sẽ hỏi trong danh sách gửi thư những gì được lên kế hoạch cho điều đó.

Đây là bản cập nhật mới nhất:

Cách hỗ trợ mới để cài đặt nhị phân sẽ là wheel ! Nó chưa được trong tiêu chuẩn, nhưng gần như. Phiên bản hiện tại vẫn là bản alpha: 1.0.0a1

https://pypi.python.org/pypi/wheel

http://wheel.readthedocs.org/en/latest/

Tôi sẽ kiểm tra wheelbằng cách tạo trình cài đặt OS X để PySidesử dụngwheel thay vì trứng. Sẽ lấy lại và báo cáo về điều này.

chúc mừng - Chris

Cập nhật nhanh:

Quá trình chuyển đổi wheelgần như đã kết thúc. Hầu hết các gói đều hỗ trợwheel .

Tôi hứa sẽ xây dựng bánh xe cho PySide và tôi đã làm điều đó vào mùa hè năm ngoái. Hoạt động tuyệt vời!

GỢI Ý: Một số nhà phát triển đã thất bại trong việc hỗ trợ định dạng bánh xe, đơn giản là vì họ quên thay thế distutilsbằng setuptools. Thông thường, thật dễ dàng để chuyển đổi các gói như vậy bằng cách thay thế từ đơn này trong setup.py.


2
được cập nhật ở trên - Tôi nghĩ rằng sự chờ đợi đã gần hết ;-)
Christian Tismer

Tôi nên cập nhật điều này, một lần nữa, vì bánh xe đã trở thành tiêu chuẩn vào mùa xuân năm 2014. Thực ra, tôi nghĩ những chủ đề cũ như vậy không nên thay đổi quảng cáo, bởi vì - những câu trả lời cũ khá tốt - dễ dàng thay thế mọi thứ khi thực tế thay đổi. Nhưng có công bằng không, khi lý do ban đầu cho một câu hỏi không còn nữa?
Christian Tismer

3

Chỉ cần gặp một trường hợp đặc biệt mà tôi phải sử dụng easy_installthay vìpip hoặc tôi phải trực tiếp rút mã nguồn.

Đối với gói GitPython, phiên bản trong pipquá cũ 0.1.7, trong khi easy_installphiên bản mới nhất là phiên bản mới nhất0.3.2.rc1 .

Tôi đang sử dụng Python 2.7.8. Tôi không chắc chắn về cơ chế lót của easy_installpip, nhưng ít nhất các phiên bản của một số gói có thể khác nhau và đôi khi easy_installlà phiên bản có phiên bản mới hơn.

easy_install GitPython

6
Tôi đã kiểm tra điều này ngay bây giờ (xem dấu thời gian) và nó không còn đúng nữa: Cả pip và easy_install đều hoạt động như nhau, dẫn đến GitPython 0.3.5 ngày hôm nay. (Chỉ được thử nghiệm trên OS X Yosemite). Nền tảng của bạn là gì? Vui lòng cập nhật mục nhập của bạn bởi vì nó hiện đang gây hiểu nhầm.
Christian Tismer
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.