Python có hệ thống quản lý gói / mô-đun không?


145

Python có hệ thống quản lý gói / mô-đun, tương tự như cách Ruby có rubygems nơi bạn có thể làm gem install packagenamekhông?

Khi cài đặt Mô-đun Python , tôi chỉ thấy các tài liệu tham khảo python setup.py install, nhưng điều đó đòi hỏi bạn phải tìm gói đầu tiên.


3
Nếu bạn nghĩ rằng chỉ số gói của Python PyPI nên có hướng dẫn rõ ràng hơn về cách cài đặt gói, vui lòng bỏ phiếu và nhận xét về vấn đề này tại bitbucket.org/pypa/pypi/su/149/
Đại tá Panic

Mặc dù nó là hiện tại vào thời điểm đó, liên kết trong câu hỏi này bây giờ là tài liệu phân phối di sản. Tôi đã gửi bug.txtthon.org/su26014 để nói rằng những tài liệu này cần phải rõ ràng hơn rằng chúng không còn phù hợp để sử dụng làm tài liệu người dùng cuối (chúng chỉ được giữ lại vì lợi ích của những người triển khai công cụ).
ncoghlan

Câu trả lời:


213

Tiến bộ gần đây

Tháng 3 năm 2014 : Tin vui! Tàu Python 3,4 với Pip. Pip từ lâu đã là người quản lý gói tiêu chuẩn thực tế của Python. Bạn có thể cài đặt một gói như thế này:

pip install httpie

Wahey! Đây là tính năng tốt nhất của bất kỳ bản phát hành Python nào. Nó làm cho sự giàu có của các thư viện cộng đồng có thể truy cập được cho mọi người. Người mới không còn bị loại trừ khỏi việc sử dụng các thư viện cộng đồng bởi những khó khăn cấm thiết lập.

Tuy nhiên , vẫn còn một số sự thất vọng nổi bật với trải nghiệm đóng gói Python. Tích lũy, họ làm cho Python rất không mong muốn cho người mới. Ngoài ra, lịch sử bỏ bê lâu dài (tức là không giao hàng với người quản lý gói trong 14 năm từ Python 2.0 đến Python 3.3) đã gây thiệt hại cho cộng đồng. Tôi mô tả cả hai dưới đây.

Nỗi thất vọng nổi bật

Điều quan trọng là phải hiểu rằng mặc dù người dùng có kinh nghiệm có thể giải quyết những sự thất vọng này, nhưng chúng là những rào cản đáng kể đối với những người mới sử dụng Python. Trong thực tế, khó khăn và không thân thiện với người dùng nói chung có khả năng ngăn cản nhiều người trong số họ.

Trang web PyPI phản tác dụng

Mỗi ngôn ngữ với trình quản lý gói đều có kho lưu trữ chính thức (hoặc chính thức) cho cộng đồng để tải xuống và xuất bản các gói. Python có Chỉ số gói Python, PyPI. https://pypi.python.org/pypi

Hãy so sánh các trang của nó với các trang của RubyGems và Npm (trình quản lý gói Node).

  1. https://rubygems.org/gems/rails Trang RubyGems cho góirails
  2. https://www.npmjs.org/package/express trang Npm cho góiexpress
  3. https://pypi.python.org/pypi/simplejson/ trang PyPI cho góisimplejson

Bạn sẽ thấy các trang RubyGems và Npm đều bắt đầu bằng một mô tả một dòng của gói, sau đó hướng dẫn thân thiện lớn về cách cài đặt nó.

Trong khi đó, khốn cho bất kỳ người dùng Python không may nào ngây thơ nhìn vào PyPI. Trên https://pypi.python.org/pypi/simplejson/ , họ sẽ không tìm thấy hướng dẫn hữu ích nào như vậy. Tuy nhiên, có một liên kết 'Tải xuống' màu xanh lá cây lớn. Nó không phải là không hợp lý để làm theo nó. Aha, họ bấm! Trình duyệt của họ tải xuống một .tar.gztập tin. Nhiều người dùng Windows thậm chí không thể mở nó, nhưng nếu họ kiên trì, cuối cùng họ có thể giải nén nó, sau đó chạy setup.pyvà cuối cùng với sự trợ giúp của Google setup.py install. Một số sẽ từ bỏ và phát minh lại bánh xe ..

Tất nhiên, tất cả những điều này là sai. các đơn giản nhất cách để cài đặt một gói là với một lệnh Pip. Nhưng PyPI thậm chí không đề cập đến Pip. Thay vào đó, nó dẫn họ xuống một con đường cổ xưa và tẻ nhạt.

Lỗi: Không thể tìm thấy vcvarsall.bat

Numpy là một trong những thư viện phổ biến nhất của Python. Hãy thử cài đặt nó với Pip, bạn sẽ nhận được thông báo lỗi khó hiểu này:

Lỗi: Không thể tìm thấy vcvarsall.bat

Cố gắng khắc phục đó là một trong những câu hỏi phổ biến nhất trên Stack Overflow: " error: Không thể tìm thấy vcvarsall.bat "

Rất ít người thành công.

Để so sánh, trong tình huống tương tự, Ruby in thông báo này, giải thích những gì đang xảy ra và cách khắc phục:

Vui lòng cập nhật PATH của bạn để bao gồm các công cụ xây dựng hoặc tải xuống DevKit từ http://rubyinstaller.org/doads và làm theo hướng dẫn tại http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

Gói xuất bản là khó

Ruby và Nodejs giao hàng với các trình quản lý gói đầy đủ tính năng, Gem (từ 2007) và Npm (kể từ 2011), và đã nuôi dưỡng các cộng đồng chia sẻ tập trung quanh GitHub. Npm làm cho các gói xuất bản dễ dàng như cài đặt chúng, nó đã có các gói 64k . RubyGems liệt kê các gói 72k . Chỉ mục gói Python đáng kính chỉ liệt kê 41k .

Lịch sử

Bay theo phương châm " bao gồm pin ", Python được vận chuyển mà không có người quản lý gói cho đến năm 2014.

Cho đến Pip, tiêu chuẩn thực tế là một mệnh lệnh easy_install. Đó là không đủ mong muốn. Không có lệnh để gỡ cài đặt gói.

Pip là một cải tiến lớn. Nó có hầu hết các tính năng của Ruby's Gem. Thật không may, Pip là - cho đến gần đây - thật khó để cài đặt. Trên thực tế, vấn đề vẫn là câu hỏi hàng đầu của Python về Stack Overflow: " Làm cách nào để tôi cài đặt pip trên Windows? "


3
Đối với bất kỳ ai quan tâm, PEP 439 đang đề xuất một cách hợp lý hóa quy trình cài đặt pip, mặc dù tôi nghĩ PEP này chỉ là một phần của chiến lược rộng hơn đang được xem xét. Xem thêm thảo luận ở đây .
Cartroo

3
@Cartroo đó là tin tuyệt vời! Python xứng đáng là một người quản lý gói, tôi hy vọng các nhà phát triển có thể làm cho nó xảy ra.
Đại tá Panic

Hoàn toàn, quá hạn lâu. Tôi chắc chắn hy vọng rằng nó làm cho nó thành Python 3,4, ít nhất. Thật không may, tôi rất nghi ngờ rằng cuối cùng nó sẽ được chuyển trở lại thành 2.x, nhưng ít nhất có ánh sáng ở cuối đường hầm. Chúng ta hãy hy vọng nó không phải là một con rồng sắp tới ... (
^ ^ ^)

6
Để bảo vệ Python, các ngôn ngữ mới hơn như Ruby và Node đã may mắn có thể quan sát các lỗi của các ngôn ngữ trước đó và tránh chúng. Điều đó nói rằng, tôi thực sự mong muốn quản lý gói trên Python sẽ nhận được nhiều tình yêu và sự quan tâm hơn, vì vậy tôi rất vui khi thấy PEP 439 như được chỉ ra bởi @Cartroo.
Dennis

Tôi đồng ý rằng quản lý gói của Ruby là một điều tuyệt vời từ quan điểm (người dùng cuối) của tôi .. gem install Xdường như chỉ hoạt động trên tất cả các nền tảng. Vậy làm thế nào mà họ quản lý cái này cho những viên đá quý yêu cầu biên dịch mã C trên Windows?
bsa

64

Chỉ số gói Python (PyPI) dường như là tiêu chuẩn:

  • Để cài đặt một gói: pip install MyProject
  • Để cập nhật một gói pip install --upgrade MyProject
  • Để sửa phiên bản của góipip install MyProject==1.0

Bạn có thể cài đặt trình quản lý gói như sau:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Người giới thiệu:


3
Đây là câu trả lời hiện đại.
Gringo Suave

6
Tôi đã tìm kiếm trên mạng trong 20 phút và câu trả lời này không đâu vào đâu. Cảm ơn bạn rất nhiều. Ngoài ra, tôi có nghi ngờ nghiêm trọng về việc sử dụng python nếu tài liệu này tệ ... điều này phải ở trên trang chính của Python hoặc có thể truy cập từ google hoặc một cái gì đó
Chris J

63

Và chỉ để cung cấp một sự tương phản, cũng có pip .


2
cảm ơn! Tại sao pip không được đề cập trên trang tài liệu mô-đun python?
mẹ cheng

Lưu ý rằng pip không hỗ trợ trứng, nó chỉ cài đặt các gói nguồn. Nói chung, pip thực hiện nhiều thứ tốt hơn easy_install, nhưng easy_install có thể được cài đặt theo mặc định trên hầu hết các unixes, pip thì không.
Jeffrey Harris

8
@ Mẹ ơi! Nếu các nhà phát triển Python quan tâm đến trải nghiệm người dùng, họ sẽ gửi Python với trình quản lý gói (chẳng hạn như pip). Ruby vận chuyển với Gem và Nodejs với Npm. stackoverflow.com/a/13445719/284795
Đại tá Panic

21

Là một nhà phát triển và học hỏi về Ruby và Perl, tôi chưa thấy easy_install hoặc pip tương đương với RubyGems hoặc CPAN.

Tôi có xu hướng giữ cho các hệ thống phát triển của mình chạy các phiên bản mô-đun mới nhất khi các nhà phát triển cập nhật chúng và đóng băng các hệ thống sản xuất của tôi ở các phiên bản đã đặt. Cả RubyGems và CPAN đều giúp bạn dễ dàng tìm thấy các mô-đun bằng cách liệt kê những thứ có sẵn, sau đó cài đặt và sau đó cập nhật chúng riêng lẻ hoặc hàng loạt nếu muốn.

easy_install và pip giúp dễ dàng cài đặt mô-đun ONCE Tôi đã tìm thấy nó thông qua tìm kiếm trình duyệt hoặc tìm hiểu về nó bằng một số phương tiện khác, nhưng họ sẽ không cho tôi biết những gì có sẵn. Tôi có thể đặt tên rõ ràng cho mô-đun sẽ được cập nhật, nhưng các ứng dụng sẽ không cho tôi biết những gì đã được cập nhật cũng như chúng sẽ không cập nhật hàng loạt mọi thứ nếu tôi muốn.

Vì vậy, chức năng cơ bản có trong pip và easy_install nhưng có những tính năng bị thiếu mà tôi muốn thấy sẽ giúp chúng thân thiện hơn và dễ sử dụng hơn và ngang bằng với CPAN và RubyGems.


Câu trả lời này bây giờ là tốt và thực sự lỗi thời.
ncoghlan


11

Kể từ cuối năm 2014, phân phối Anaconda Python của Continuum Analytics với trình quản lý gói conda nên được xem xét. Nó giải quyết hầu hết các vấn đề nghiêm trọng mà mọi người gặp phải với Python nói chung (quản lý các phiên bản Python khác nhau, cập nhật các phiên bản Python, quản lý gói, môi trường ảo, tương thích Windows / Mac) trong một lần tải xuống.

Nó cho phép bạn thực hiện khá nhiều thứ bạn có thể muốn với Python mà không phải thay đổi hệ thống. Giải pháp ưa thích tiếp theo của tôi là pip + virtualenv, nhưng bạn phải cài đặt virtualenv vào hệ thống Python của bạn (và Python hệ thống của bạn có thể không phải là phiên bản bạn muốn) hoặc xây dựng từ nguồn . Anaconda làm cho toàn bộ quá trình này chỉ bằng một nút bấm, cũng như thêm một loạt các tính năng khác.


7

Đó là easy_install .


1
Nếu bạn muốn downvote tất cả mọi người trên trang đã nói easy_install, xin vui lòng kiểm tra ngày đầu tiên. Đó là lời khuyên hợp lệ khi nó được đưa ra gần 7 năm trước . Tôi không nghĩ rằng những người trả lời của chúng tôi sẽ thường xuyên xem lại điều này để cập nhật, vì vậy việc hạ thấp là ngớ ngẩn.
Kirk Strauser


5

Tôi không thấy MacPorts hoặc Homebrew được đề cập trong các câu trả lời khác ở đây, nhưng vì tôi thấy chúng được đề cập ở nơi khác trên Stack Overflow cho các câu hỏi liên quan, tôi sẽ thêm 0,02 đô la Mỹ của riêng mình mà nhiều người dường như coi MacPorts không chỉ là một gói Trình quản lý các gói nói chung (tính đến ngày hôm nay, chúng liệt kê 16311 gói / cổng, 2931 khớp với "python", mặc dù chỉ dành cho máy Mac), nhưng cũng là trình quản lý gói (có thể tốt hơn) cho các gói / mô-đun Python:

Câu hỏi

"... phương pháp mà các nhà phát triển python Mac sử dụng để quản lý các mô-đun của họ là gì?"

Đáp án

Khoa học viễn tưởng

"Máy Mac (không giống như Linux) không đi kèm với trình quản lý gói, nhưng có một vài trình quản lý gói phổ biến mà bạn có thể cài đặt. Macports ..."

Tôi vẫn đang tranh luận về việc có nên sử dụng MacPorts hay không, nhưng hiện tại tôi đang nghiêng về hướng đó.


1
Homebrew tự nói: Bạn có thể cài đặt các gói Python với (easy_install đã lỗi thời hoặc) pip install <your_favorite_package>
Simone

4

Trên Windows cài đặt http://chocolatey.org/ rồi

choco install python

Mở một cửa sổ cmd mới với PATH được cập nhật. Tiếp theo, làm

choco install pip

Sau đó bạn có thể

pip install pyside
pip install ipython
...

Tôi muốn trả lời câu hỏi này như một bình luận cho câu trả lời của Thomas Bratt nhưng tôi không có đủ danh tiếng ...
hansvb

3

Vì không ai nhắc đến pipenv ở đây, tôi muốn mô tả quan điểm của tôi tại sao mọi người nên sử dụng nó để quản lý các gói python.

Như @ColonelPanic đã đề cập, có một số vấn đề với Chỉ số gói Python và với pipvirtualenv cũng vậy.

Pipenv giải quyết hầu hết các vấn đề với pip và cũng cung cấp các tính năng bổ sung.

Tính năng Pipenv

Pipenv được dự định để thay thế pip và virtualenv, có nghĩa là pipenv sẽ tự động tạo một môi trường ảo riêng cho mọi dự án, do đó tránh xung đột giữa các phiên bản / phiên bản gói python khác nhau cho các dự án khác nhau.

  • Cho phép các bản dựng thực sự xác định, trong khi dễ dàng chỉ định những gì bạn muốn.
  • Tạo và kiểm tra băm tập tin cho các phụ thuộc bị khóa.
  • Tự động cài đặt Pythons cần thiết, nếu pyenv có sẵn.
  • Tự động tìm nhà dự án của bạn, theo cách đệ quy, bằng cách tìm Pipfile.
  • Tự động tạo Pipfile, nếu không tồn tại.
  • Tự động tạo một virtualenv ở một vị trí tiêu chuẩn.
  • Tự động thêm / xóa các gói vào Pipfile khi chúng chưa được cài đặt.
  • Tự động tải tập tin .env, nếu chúng tồn tại.

Nếu bạn đã làm việc trên các dự án python trước đây, bạn sẽ nhận ra các tính năng này giúp việc quản lý các gói dễ dàng hơn.

Các lệnh khác

  • checkkiểm tra các lỗ hổng bảo mật và khẳng định rằng các yêu cầu PEP 508 đang được đáp ứng bởi môi trường hiện tại. ( mà tôi nghĩ là một tính năng tuyệt vời, đặc biệt là sau này - Gói độc hại trên PyPi )
  • graph sẽ hiển thị cho bạn một biểu đồ phụ thuộc, về các phụ thuộc được cài đặt của bạn.

Bạn có thể đọc thêm về nó ở đây - Pipenv .

Cài đặt

Bạn có thể tìm thấy các tài liệu cài đặt ở đây

PS: Nếu bạn thích làm việc với các yêu cầu Gói Python , bạn sẽ rất vui khi biết rằng pipenv là của cùng một nhà phát triển Kenneth Reitz



0

Thơ là những gì bạn đang tìm kiếm. Nó chăm sóc quản lý phụ thuộc, môi trường ảo, chạy.

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.