Cách tốt nhất để cài đặt các gói Python là gì?


41

Cách tốt nhất để cài đặt các gói Python trong Ubuntu 11 là gì? Tôi là một người chuyển đổi gần đây sang Ubuntu và muốn tìm hiểu các thực tiễn tốt nhất.

Đối với ngữ cảnh, tôi đang tìm cách cài đặt gói tweeststream, nhưng tôi không thấy nó trong trình quản lý gói Synaptic của mình. Ngoài ra, tôi rất mới với lập trình, nhưng tôi thường có thể làm theo cùng với các mẫu mã.


Câu trả lời:


30

Tôi nghĩ cách tốt nhất cho bạn là cài đặt hệ thống đóng gói Python như "python-pip". Bạn có thể cài đặt nó với Synaptic hoặc Ubuntu Software Center.

Pip sẽ cho phép bạn dễ dàng cài đặt và gỡ cài đặt các gói Python, đơn giản như pip install package. Trong trường hợp của bạn, nó sẽ là một cái gì đó như thế này từ thiết bị đầu cuối:

sudo pip install tweeststream

3
Điều này tốt cho các gói đơn giản, nhưng không tốt cho các gói lớn hơn, ví dụ như numpy
hayd

@hayd: tại sao? Điều đó có liên quan đến Askubfox.com/questions/595366/ không
naught101 11/03/2015

2
@ naught101 Tôi nghĩ rằng tôi có thể có nghĩa là scipy, không chắc nó có liên quan không ... có vẻ như pip đã quá muộn trên con đường trăn. Tôi thực sự khuyên bạn nên sử dụng anaconda / conda, nó vượt trội hơn nhiều so với pip IMO.
hayd

2
IMHO sử dụng sudo pip <anything>nên được sử dụng rất cẩn thận. Vì tweetstreamkhông có trong Trung tâm phần mềm Ubuntu , tôi khuyên bạn nên sử dụng virtualenv . tweetstream củasetup.py đòi hỏi anyjsonđó một gói Ubuntu . Không cài đặt dòng tweet trong một virtualenvứng dụng Ubuntu khác có thể bị anyjsonlỗi. Khắc phục sự cố khó khăn.
Đánh dấu Mikofski

9
Nhắc lại: không sử dụng sudo piptrên Ubuntu. @MarkMikofski: bạn không cần virtualenv (trừ khi bạn muốn nó vì một số lý do cụ thể). python -mpip install --user package-namecó thể cài đặt gói packafe-namecho người dùng hiện tại. Nếu có các phụ thuộc phức tạp (phần mở rộng C lớn); bạn có thể cài đặt chúng bằng cách sử dụng apt-get, để tránh cài đặt phụ thuộc bản dựng trừ khi cần thiết.
jfs

37

đã cập nhật: 2019-05-11: Bài đăng này chủ yếu đề cập virtualenv, nhưng theo tài liệu Python về cài đặt mô-đun , vì Python 3.5 "việc sử dụng venvhiện được khuyến nghị để tạo môi trường ảo", trong khi đó virtualenvlà một thay thế cho các phiên bản Python trước 3.4 .

đã cập nhật: 2018-08-17: kể từ khi conda-4.4.0 sử dụng condacho activateanaconda trên tất cả các nền tảng

đã cập nhật: 2017-03-27: PEP 513 - manylinuxnhị phân cho PyPI

đã cập nhật: 2016-08-19: Tùy chọn Anaconda liên tục

Đây là một bản sao của easy_install / pip hoặc apt-get .

Đối với các gói Python toàn cầu , hãy sử dụng Trung tâm phần mềm Ubuntu, apt, apt-get hoặc synaptic

Ubuntu sử dụng Python cho nhiều chức năng quan trọng, do đó việc can thiệp vào Python có thể làm hỏng hệ điều hành của bạn. Đây là lý do chính tôi không bao giờ sử dụng piptrên hệ thống Ubuntu của tôi, nhưng thay vào đó tôi sử dụng hoặc Ubuntu Software Center, synaptic , apt-gethoặc mới hơn chỉ apt, mà tất cả theo mặc định cài đặt các gói từ kho Ubuntu . Các gói này đã được thử nghiệm, thường được biên dịch trước để chúng cài đặt nhanh hơn và cuối cùng được thiết kế cho Ubuntu. Ngoài ra, tất cả các phụ thuộc cần thiết cũng được cài đặt và nhật ký cài đặt được duy trì để chúng có thể được khôi phục. Tôi nghĩ rằng hầu hết các gói đều có repos Launchpad tương ứng để bạn có thể gửi các vấn đề.

Một lý do khác để sử dụng các gói Ubuntu là đôi khi các gói Python này có các tên khác nhau tùy thuộc vào nơi bạn đã tải chúng xuống. Python-chardet là một ví dụ về một gói mà tại một thời điểm được đặt tên là một thứ trên PyPI và một thứ khác trong kho lưu trữ Ubuntu. Do đó, làm điều gì đó như pip install requestssẽ không nhận ra rằng chardet đã được cài đặt trong hệ thống của bạn vì phiên bản Ubuntu có một tên khác và do đó cài đặt một phiên bản mới sẽ làm hỏng hệ thống của bạn theo cách không đáng kể nhưng tại sao bạn lại làm vậy.

Nói chung, bạn chỉ muốn cài đặt mã đáng tin cậy vào hệ điều hành của mình. Vì vậy, bạn nên lo lắng về việc gõ $ sudo pip <anything-could-be-very-bad>.

Cuối cùng, một số thứ chỉ dễ cài đặt hơn bằng các gói Ubuntu. Ví dụ: nếu bạn cố gắng pip install numpycài đặt numpy & scipy trừ khi bạn đã cài đặt gfortran, atlas-dev, blas-dev và lapack-dev, bạn sẽ thấy một luồng lỗi biên dịch vô tận. Tuy nhiên, cài đặt numpy & scipy thông qua kho lưu trữ Ubuntu dễ dàng như ...

$ sudo apt-get install python-numpy python-scipy

Bạn thật may mắn, vì bạn đang sử dụng Ubuntu, một trong những bản phân phối được cập nhật và hỗ trợ rộng rãi nhất hiện có. Nhiều khả năng mọi gói Python bạn cần đều có trong kho Ubuntu và có thể đã được cài đặt trên máy của bạn. Và cứ sau 6 tháng, một chu kỳ gói mới sẽ được phát hành với bản phân phối Ubuntu mới nhất.

Nếu bạn tin tưởng 100% rằng gói sẽ không can thiệp vào hệ thống Ubuntu của bạn theo bất kỳ cách nào, thì bạn có thể cài đặt nó bằng pip và Ubuntu đủ tốt để tách các gói này khỏi các gói distro bằng cách đặt các gói distro vào một thư mục có tên dist-packages/. Kho lưu trữ Ubuntu có cả pip, virtualenv và setuptools. Tuy nhiên, tôi đề nghị thứ hai của Wojciech sử dụng virtualenv.

Đối với các dự án Python cá nhân, sử dụng pip và bánh xe trong virtualenv

Nếu bạn cần phiên bản mới nhất hoặc mô-đun không có trong kho lưu trữ Ubuntu thì hãy khởi động virtualenv và sử dụng pip để cài đặt gói. Mặc dù pip và setuptools đã hợp nhất, pip IMO được ưu tiên hơn cài đặt dễ dàng hoặc distutils, bởi vì nó sẽ luôn đợi cho đến khi gói được tải xuống và xây dựng hoàn chỉnh trước khi sao chép nó vào hệ thống tệp của bạn và nó giúp nâng cấp hoặc gỡ cài đặt dễ dàng. Theo nhiều cách, nó tương tự như apt-get, ở chỗ nó thường xử lý tốt các phụ thuộc. Tuy nhiên bạn sẽ có thể phải xử lý một số phụ thuộc chính mình, nhưng vì PEP 513 đã được thông qua hiện nay có manylinuxmã nhị phân vào Python Package Index (PyPI) cho distro Linux phổ biến như Ubuntu và Fedora .ví dụ như đã đề cập ở trên cho NumPy và scipy chắc chắn rằng bạn đã cài đặt gfortran, atlas-dev, blas-dev và LAPACK-dev từ kho Ubuntu Ví dụ, cả hai NumPyscipy hiện đang phân phối cho Ubuntu như manylinuxbánh xe theo mặc định OpenBLAS sử dụng thay vì của ATLAS. Bạn vẫn có thể xây dựng chúng từ nguồn bằng cách sử dụng các tùy chọn pip --no-use-wheelhoặc--no-binary <format control> .

~$ sudo apt-get install gfortran libblas-dev liblapack-dev libatlas-dev python-virtualenv
~$ mkdir ~/.venvs
~$ virtualenv ~/.venvs/my_py_proj
~$ source ~/.venvs/my_py_proj/bin/activate
~(my_py_proj)$ pip install --no-use-wheel numpy scipy

Xem phần tiếp theo, "Bạn không ở trong sudoers", bên dưới để cài đặt các phiên bản cập nhật của pip, setuptools, virtualenv hoặc bánh xe vào hồ sơ cá nhân của bạn bằng cách sử dụng --usersơ đồ cài đặt với pip. Bạn có thể sử dụng điều này để cập nhật pip cho mục đích sử dụng cá nhân của bạn như JF Sebastian đã chỉ ra trong nhận xét của mình cho câu trả lời khác . LƯU Ý: điều -mnày thực sự chỉ cần thiết trên MS Windows khi cập nhật pip .

python -m pip install --user pip setuptools wheel virtualenv

Các phiên bản mới hơn của pip tự động bộ đệm bánh xe, vì vậy những điều sau đây chỉ hữu ích cho các phiên bản cũ hơn của pip. Vì cuối cùng bạn có thể cài đặt những thứ này nhiều lần, hãy xem xét sử dụng bánh xe với pip để tạo ra một buồng lái. Bánh xe đã được bao gồm trong virtualenvv13.0.0 do đó nếu phiên bản của bạn virtualenvquá cũ, bạn có thể cần phải cài đặt bánh xe trước.

~(my_py_proj)$ pip install wheel  # only for virtualenv < v13.0.0
~(my_py_proj)$ pip wheel --no-use-wheel numpy scipy

Điều này sẽ tạo tập tin bánh xe nhị phân trong <cwd>/wheelhouse, sử dụng -dđể chỉ định một thư mục khác. Bây giờ nếu bạn bắt đầu một virtualenv khác và bạn cần các gói tương tự bạn đã xây dựng, bạn có thể cài đặt chúng từ nhà xe của bạn bằng cách sử dụngpip install --find-links=<fullpath>/wheelhouse

Đọc Cài đặt Mô-đun Python trong tài liệu Python và Cài đặt gói trên trang chính của Chỉ mục gói Python . Ngoài ra pip , venv , virtualenvbánh xe .

Nếu bạn không vào sudoersvirtualenvkhông được cài đặt.

Một tùy chọn khác để sử dụng môi trường ảo hoặc nếu bạn đang sử dụng chia sẻ Linux mà không có quyền root, thì sử dụng các lược đồ cài đặt --userhoặc --home=<wherever-you-want>Python với Python distutilssẽ cài đặt các gói theo giá trị site.USERBASEhoặc đến bất cứ nơi nào bạn muốn. Các phiên bản mới hơn của pip cũng có một --usertùy chọn. Đừng dùng sudo!

pip install --user virtualenv

Nếu phiên bản Linux của pip của bạn quá cũ, thì bạn có thể chuyển các tùy chọn thiết lập bằng cách sử dụng --install-optionhữu ích để chuyển tùy chọn tùy chỉnh cho một số setup.pytập lệnh cho một số gói xây dựng tiện ích mở rộng, chẳng hạn như cài đặt PREFIX. Bạn có thể chỉ cần giải nén phân phối và sử dụng distutilsđể cài đặt gói theo cách cũ của trường bằng cách nhập python setup install [options]. Đọc một số tài liệu cài đặtdistutilstài liệu có thể giúp đỡ.

Python đủ tốt để thêm site.USERBASEvào PYTHONPATHtrước bất kỳ điều gì khác, vì vậy những thay đổi sẽ chỉ ảnh hưởng đến bạn. Một vị trí phổ biến cho --home~/.local. Xem hướng dẫn cài đặt mô-đun Python để biết cấu trúc tệp chính xác và cụ thể nơi gói trang web của bạn. Lưu ý : nếu bạn sử dụng các --homechương trình cài đặt thì bạn có thể cần phải thêm nó vào PYTHONPATHbiến môi trường sử dụng exporttrong của bạn .bashrc, .bash_profilehoặc trong vỏ của mình đối với các gói địa phương của bạn có sẵn trong Python.

Sử dụng Continuum Anaconda Python cho các dự án toán học, khoa học, dữ liệu hoặc cá nhân

Nếu bạn đang sử dụng Python cho toán học, khoa học hoặc dữ liệu, thì IMO một lựa chọn thực sự tốt là Phân phối Anaconda-Python hoặc phân phối miniconda cơ bản hơn do Anaconda, Inc. (trước đây gọi là Phân tích liên tục ) . Mặc dù bất cứ ai cũng có thể hưởng lợi từ việc sử dụng Anaconda cho các dự án cá nhân, cài đặt mặc định bao gồm hơn 500 gói toán học và khoa học như NumPy, SciPy, Pandas và Matplotlib , trong khi miniconda chỉ cài đặt Anaconda-Python và trình quản lý môi trường conda. Anaconda chỉ cài đặt vào hồ sơ cá nhân của bạn, tức là: /home/<user>/thay đổi ~/.bashrchoặc ~/.bash_profileđể chuẩn bị đường dẫn của Anaconda đến cá nhân của bạn $PATH đề xuất tìm nguồn cung ứngconda.shtrong ~/.bashrcđó cho phép bạn sử dụng conda activate <env|default is base>để bắt đầu anaconda - điều này chỉ ảnh hưởng đến bạn - đường dẫn hệ thống của bạn không thay đổi . Do đó, bạn không cần quyền truy cập root hoặc sudosử dụng Anaconda! Nếu bạn đã thêm Anaconda-Python, miniconda hoặc conda vào đường dẫn cá nhân của mình, thì bạn nên xóa bản PATHxuất khỏi ~/.bashrcvà cập nhật lên khuyến nghị mới , vì vậy Python hệ thống của bạn sẽ trở lại trước tiên.

Điều này hơi giống với --usertùy chọn mà tôi đã giải thích trong phần trước, ngoại trừ nó áp dụng cho toàn bộ Python và không chỉ các gói. Do đó, Anaconda hoàn toàn tách biệt với Python hệ thống của bạn , nó sẽ không can thiệp vào Python hệ thống của bạn và chỉ bạn mới có thể sử dụng hoặc thay đổi nó. Vì nó cài đặt phiên bản Python mới và tất cả các thư viện của nó, bạn sẽ cần ít nhất 200 MB phòng, nhưng rất thông minh về bộ nhớ đệm và quản lý thư viện, điều quan trọng đối với một số điều thú vị bạn có thể làm với Anaconda.

Anaconda quản lý một bộ sưu tập các tệp nhị phân và thư viện Python được yêu cầu bởi các phụ thuộc trong kho lưu trữ trực tuyến (trước đây gọi là binstar ) và chúng cũng lưu trữ các gói người dùng dưới dạng các "kênh" khác nhau. Trình quản lý gói được sử dụng bởi Anaconda, condatheo mặc định sẽ cài đặt các gói từ Anaconda, nhưng bạn có thể báo hiệu một "kênh" khác bằng cách sử dụng -ctùy chọn.

Cài đặt các gói condagiống như pip:

$ conda install -c pvlib pvlib  # install pvlib pkg from pvlib channel

Nhưng condacó thể làm nhiều hơn thế! Nó cũng có thể tạo và quản lý môi trường ảo giống như virtualenv. Do đó, vì Anaconda tạo môi trường ảo, piptrình quản lý gói có thể được sử dụng để cài đặt các gói từ PyPI vào môi trường Anaconda mà không cần root hoặc sudo. Đừng không sử dụng sudovới Anaconda! Cảnh báo! Hãy cẩn thận mặc dù khi trộn pipcondatrong môi trường Anaconda, b / c bạn sẽ phải quản lý các gói phụ thuộc cẩn thận hơn. Một lựa chọn khác piptrong môi trường conda là sử dụng kênh conda-forge, nhưng cũng tốt nhất để làm điều đó trong một môi trường conda mới với conda-forge là kênh mặc định. Như một phương sách cuối cùng, nếu bạn không thể tìm thấy một gói ở bất cứ đâu ngoài PyPI, hãy cân nhắc sử dụng --no-depssau đó cài đặt các phụ thuộc còn lại bằng tay bằng cách sử dụng conda.

Anaconda cũng tương tự như một số cách với Ruby RVM nếu bạn quen thuộc với công cụ đó. Anaconda condacũng cho phép bạn tạo các môi trường ảo với các phiên bản Python khác nhau . ví dụ : conda create -n py35sci python==3.5.2 numpy scipy matplotlib pandas statsmodels seabornsẽ tạo ra một ngăn xếp khoa học / dữ liệu khoa học bằng Python-3.5 trong một môi trường mới được gọi là py35sci. Bạn có thể chuyển đổi môi trường bằng cách sử dụng conda. Kể từ conda-4.4.0, giờ đây nó khác với cách virtualenvsử dụng source venv/bin/activate, nhưng trước đây với conda-4.4.0, các condalệnh giống như virtualenvvà cũng được sử dụng source:

# AFTER conda-4.4 
~/Projects/myproj $ conda activate py35sci

# BEFORE conda-4.4 
~/Projects/myproj $ source activate py35sci

Nhưng xin chờ chút nữa! Anaconda cũng có thể cài đặt các ngôn ngữ khác nhau như R để lập trình thống kê từ kênh Anacondar . Bạn thậm chí có thể thiết lập kênh của riêng mình để tải lên các bản phân phối gói được xây dựng cho conda . Như đã đề cập, conda-forge duy trì các bản dựng tự động của nhiều gói trên PyPI tại kênh Anaconda của conda-forge .

Phần kết

Có nhiều tùy chọn để duy trì các dự án Python của bạn trên Linux tùy thuộc vào nhu cầu và quyền truy cập cá nhân của bạn. Tuy nhiên, nếu có một điều tôi hy vọng bạn bỏ qua câu trả lời này là bạn hầu như không bao giờ cần phải sử dụng sudođể cài đặt các gói Python . Việc sử dụng sudonên là một mùi cho bạn rằng một cái gì đó là không ổn. Bạn đã được cảnh báo.

Chúc may mắn và hạnh phúc mã hóa!


Tôi ước tôi đã đọc được điều này trước khi tôi phá hủy bản phân phối Python của hệ thống bằng cách sudosử dụng pip. Tuyệt vời writeup, cảm ơn thông tin này.
slhck

pip install numpynên cài đặt tất cả các phụ thuộc
Timo

@Timo như tôi đã đề cập trong bản cập nhật 2017-03-27 kể từ khi PEP 513 được triển khai bởi nhiều nhị phân numpy có sẵn trên PyPI được xây dựng với OpenBLAS, tức là : chúng có các phụ thuộc bắt buộc. Tuy nhiên, theo quy định, pip install <package>sẽ chỉ cài đặt các phụ thuộc gói Python được liệt kê trong install_requiresphần setup.py. Ví dụ: cài đặt Jupyter sẽ không cài đặt pandoc thư viện Haskell để xuất sổ ghi chép Jupyter dưới dạng LaTeX, v.v.
Mark Mikofski

Ngược lại, conda install <package>có thể sẽ cài đặt tất cả các phụ thuộc, bao gồm C / C ++, FORTRAN, v.v., thậm chí cả thư viện Haskell, vì conda không chỉ quản lý các gói Python như pip, nó quản lý môi trường. Vì vậy, nếu bạn đã có Anaconda hoặc miniconda thì hãy conda install Jupytercài đặt mọi thứ trong tệp của công thứcmeta.yml , bao gồm thư viện pandan Haskell . Để biết thêm thông tin, xem PyPA
Mark Mikofski 27/03/18

10

Ngoài sự bổ sung của Novarchibald, nói chung nên tạo một môi trường ảo cho dự án python của bạn và cài đặt các phụ thuộc bên trong. Điều này cho phép bạn kiểm soát tốt hơn các phụ thuộc và phiên bản của chúng. Để thiết lập môi trường ảo, nhập:

virtualenv --no-site-packages --distribute my_python_project

Sau đó, kích hoạt nó bằng:

cd my_python_project
source bin/activate

Tại thời điểm này, mọi thứ bạn cài đặt với pip sẽ được giữ trong môi trường ảo này. Nếu bạn muốn cài đặt một cái gì đó trên toàn cầu, thì trước tiên bạn nên thoát virtualenv bằng:

deactivate

Bạn có thể tìm hiểu thêm về virtualenv tại đây .


1
Ngoài ra: sử dụng pip từ thư mục bin virtualenv (ở đây my_python_project / bin / pip) bạn duy trì môi trường đó mà không cần phải "kích hoạt" nó. Sau đó - sử dụng bất kỳ tập lệnh nào được cài đặt trong thùng sẽ sử dụng virutalenv đã cho. "kích hoạt" chỉ tiện dụng để thực hiện các cuộc gọi đến "python", "easy_install" và "pip" bằng cách sử dụng bin cụ thể virtualenv.
Jan Vlcinsky

Các tài liệu cài đặt của Python nói rằng sử dụng "pyvenv" để tạo các môi trường ảo cụ thể cho một dự án; nhưng virtualenv là một dự phòng cho các dự án sử dụng phiên bản python cũ hơn, docs.python.org/3/installing/index.html?highlight=pip .
pbhj

2
Lưu ý rằng các virtualenvtùy chọn --no-site-packages--distributekhông còn được sử dụng ngày nay và không còn hiệu lực nữa.
Thức ăn gia súc

4

Ngoài câu trả lời của Zetah'a, lệnh cài đặt python-pip từ thiết bị đầu cuối là:

sudo apt-get install python-pip

1

Hãy thử khung này GUI cho PIP được phát triển bằng PyQt4

Khung GUI cho PIP được phát triển bằng PyQt4

Màn hình bắt đầu

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

Màn hình bắt đầu chứa các tùy chọn cho người dùng chọn quá trình anh ta muốn thực hiện.

Người ta cũng có thể chỉ định phiên bản của python mà anh ta muốn các hoạt động được thực hiện theo.

Menu tệp có tùy chọn "Thoát" (phím tắt: Ctrl + Q) và "Làm mới danh sách" để làm mới các tệp tài nguyên chứa dữ liệu gói.

Màn hình cài đặt

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

Màn hình cài đặt có một thanh tìm kiếm mà người dùng có thể sử dụng để tìm kiếm và cài đặt (các) gói mong muốn.

Màn hình cập nhật

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

Màn hình cập nhật hiển thị danh sách các gói đã lỗi thời và có thể được nâng cấp.

Gỡ cài đặt Screem

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

Màn hình gỡ cài đặt hiển thị danh sách các gói được cài đặt trong hệ thống của người dùng và có thể được gỡ cài đặt.

Cửa sổ tiến độ

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

Cửa sổ tiến trình là một tiện ích đầu cuối tích hợp sẵn cho PIP-GUI, hiển thị các quy trình đang chạy trong khi thực hiện các hoạt động.


1
Chào mừng bạn đến hỏi Ubuntu! Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Kevin Bowen
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.