Thứ ba, 03/12/2013 | 00:00 GMT+7

Các công cụ Python phổ biến: Sử dụng virtualenv, Cài đặt bằng Pip và Quản lý Gói

Khi nói đến làm việc với Python, đặc biệt là trong lĩnh vực phát triển ứng dụng, có một số công cụ nhất định mà bạn sẽ thấy được đề cập thường xuyên ở nhiều nơi hoặc open-souce khác nhau. Mặc dù được sử dụng cực kỳ phổ biến, nhưng thật không may, đôi khi khó có thể nắm được một cuốn sổ tay hướng dẫn tốt để hướng dẫn bạn từng bước, điều này cực kỳ quan trọng khi làm quen với những công cụ quan trọng và cần thiết như vậy.


Trong bài viết DigitalOcean này, ta mong muốn cung cấp cho bạn không chỉ những điều cơ bản mà còn cả logic đằng sau các công cụ và mục Python phổ biến khi ta đi sâu vào sử dụng chúng trong các tình huống thực tế. Ta sẽ bắt đầu với việc download và cài đặt một số thư viện phổ biến, cài đặt và làm việc với môi trường ảo (sử dụng virtualenv) và quản lý các gói để phát triển và production các ứng dụng của bạn .

Bài viết này hướng đến những người mới bắt đầu cũng như những người đang muốn có thêm kiến thức chuyên sâu. Nếu bạn muốn xem và tìm hiểu thêm, vui lòng đưa ra đề xuất trong phần comment bên dưới.

Python trên CentOS


Lưu ý nếu bạn đang sử dụng hệ thống CentOS / RHEL, bạn nên tránh làm việc với trình thông dịch Python mặc định đi kèm với hệ điều hành. Thay vào đó, bạn nên chọn tự cài đặt Python.

Nếu bạn chưa làm điều này và muốn tìm hiểu cách thực hiện, vui lòng xem hướng dẫn của ta : Cách cài đặt Python 2.7.6 và 3.3.3 trên CentOS 6.4 trước khi ta bắt đầu.

Tương tự như vậy, để cài đặt pipvirtualenv trên CentOS với cài đặt Python tùy chỉnh, bạn có thể làm theo hướng dẫn trong bài viết đó.

Python và các gói


Mặc dù các ứng dụng Python có thể được tạo từ một file duy nhất , nhưng thường thì chúng bao gồm một loạt các hàm, đối tượng (lớp), công cụ tiện dụng và tất nhiên, các biến trải rộng trên nhiều file , được đặt bên trong các module . Các module này cùng nhau tạo nên những gì được gọi là một gói .

Cách truyền thống để cài đặt một gói bao gồm đầu tiên phát hiện nó và sau đó download . Nghe có vẻ nhẹ nhàng và đơn giản bởi vì nó thực sự như nhiều điều trong Python - nhưng nó không phải là hoàn hảo.

Khi các file đã sẵn sàng và được extract , bằng cách sử dụng module distutils , bạn có thể cài đặt nó bằng cách gọi setup.py :

Ví dụ cài đặt của một gói:

 # Example: cd [package name]  cd a_package  python setup.py install 

distutils (tiện ích phân phối) là một bộ công cụ được sử dụng để đóng gói và phân phối mã. Nó được vận chuyển theo mặc định với Python (tức là có trong thư viện chuẩn ).

Bất chấp sự đơn giản của thủ tục được giải thích ở trên, sẽ không có ích gì nếu thử thách được tóm tắt từ việc cài đặt tồn tại ở nơi khác trong quá trình: tìm và quản lý chúng . Đây là lúc quản lý gói thông qua các công cụ - mang lại một số lợi ích như:

  • Gỡ cài đặt (ví dụ: pip uninstall package_x ),
  • Tạo version (ví dụ: pip install django==x ),
  • Và quản lý phụ thuộc tự động (vì các gói có thể phụ thuộc vào những người khác).

Quản lý gói


Các gói trong Python có thể là công cụ, thư viện, khuôn khổ và ứng dụng. Với sự phổ biến và vẻ đẹp của ngôn ngữ, có hàng chục nghìn gói có sẵn mà bạn có thể sử dụng cho các dự án của riêng mình .

Công cụ quản lý gói


Hai trình quản lý gói Python phổ biến nhất là pipeasy install_ . Cả hai đều nhằm mục đích giúp user thực hiện các nhiệm vụ:

  • Download , cài đặt và gỡ cài đặt
  • Xây dựng
  • Quản lý các gói Python và hơn thế nữa

Cả hai đều có thể xuất hiện để làm điều tương tự từ bên ngoài và dependencies doanh của họ trên setuptools thư viện chung tăng khái niệm này.

Tuy nhiên, trong trường hợp này, chính những gì ẩn giấu trong mắt mới tạo nên sự khác biệt - và rất nhiều trong số đó cũng vậy.

pip so với easy_install


Công cụ đầu tiên được tạo cho nhiệm vụ là easy_install . Mặc dù đó là một sự nhẹ nhõm và thú vị khi sử dụng so với việc làm mọi thứ bằng tay, nhưng theo thời gian, nó đã được chứng minh là có vấn đề ở một số khía cạnh. Điều đó đã tạo cơ sở cho sự phát triển của pip , một trình quản lý gói khác.

pip (theo định nghĩa của chính dự án) là một sự thay thế cho easy_install , mang lại nhiều lợi ích so với người tiền nhiệm của nó, bao gồm, nhưng không giới hạn ở:

  • Download mọi thứ trước khi cài đặt
  • Cung cấp phản hồi hữu ích trong quá trình này
  • Lưu giữ lịch sử các hành động được thực hiện
  • Cung cấp thông báo lỗi hữu ích theo truyền thống Python
  • Bổ sung virtualenv và hoạt động với nó rất tốt

Để tìm hiểu thêm về pip , hãy xem xét phần giới thiệu của nó tại index gói PyPI bằng cách nhấp vào đây .

Hướng dẫn thực hiện một pip kỹ lưỡng


Trong phần này, ta sẽ nói về việc lấy các phụ thuộc cần thiết cho pip , cài đặt version mới nhất của nó, sau đó là phần giới thiệu về chức năng cốt lõi được cung cấp như cài đặt , gỡ cài đặt , đóng băngquản lý các yêu cầu .

Khi nào tôi sẽ sử dụng pip ?

Như đã hứa ở phần giới thiệu, ta mong muốn cung cấp cho bạn các ví dụ về các tình huống thực tế.

Hãy tưởng tượng rằng bạn đang tiến hành phát triển một ứng dụng nhỏ. Bạn đã đặt ra cho mình một lộ trình, và mọi thứ đều diễn ra tốt đẹp. Sau đó, bạn khám phá một thư viện (hoặc một module ) có thể giúp ích rất nhiều cho bạn nếu bạn đưa vào ứng dụng của bạn . Bạn có thể download theo cách truyền thống như ta đã giải thích. Tuy nhiên, khi bạn có không chỉ một mà đến 3, 4 hoặc thậm chí 20 gói bạn cần xử lý, quá trình này sẽ trở nên phức tạp. Bao gồm việc quản lý chúng (ví dụ: cập nhật, gỡ cài đặt, thay thế, sử dụng version khác), bạn có thể thấy các vấn đề bạn cần giải quyết, những vấn đề này được làm dư thừa bằng cách sử dụng pip , trình quản lý gói.

Đang cài đặt pip


Để cài đặt pip , trước tiên ta cần quan tâm đến các phụ thuộc của nó.Đừng lo lắng, nó rất dễ dàng.

setuptools

Như đã giải thích ở trên, một trong những phụ thuộc của pip là thư viện setuptools . Nó được xây dựng dựa trên chức năng (tiêu chuẩn) của bộ công cụ tiện ích phân phối của Python được gọi là distutils . Cho rằng cất được cung cấp theo mặc định, tất cả ta cần là trái setuptools.

Ta sẽ tải về một cách an toàn các file cài đặt cho setuptools sử dụng curl . cURL là một thư viện hệ thống cho phép truyền dữ liệu qua nhiều giao thức khác nhau (tức là một ngôn ngữ chung để trao đổi dữ liệu giữa các ứng dụng, chẳng hạn như HTTP). Nó sẽ xác minh các certificate SSL từ nguồn và chuyển dữ liệu đến trình thông dịch Python .

Các file cài đặt này, mà trình thông dịch Python sẽ thực thi, tự động hóa quá trình cài đặt khi chúng cài đặt version ổn định mới nhất trên hệ thống của ta .

Thực hiện lệnh sau:

 curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | python - 

Việc cài đặt này cung cấp cho ta khả năng sử dụng pip trên toàn hệ thống. Tuy nhiên, đây không phải là cách ưa thích để cài đặt bất kỳ gói nào khác. Điều được khuyến khích là luôn sử dụng môi trường Python độc lập, virtualenv . Ta sẽ nói về nó trong phần tiếp theo.

Lưu ý: Bạn có thể cần đạt được quyền user cấp cao một cách rõ ràng để tiếp tục download . Trong trường hợp đó, hãy cân nhắc sử dụng:

 curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | sudo python - 

Sau khi cài đặt phụ thuộc duy nhất của nó, bây giờ ta có thể tiếp tục download và cài đặt pip .

Ta sẽ lại sử dụng curl để download và cài đặt file cài đặt một cách an toàn.

Thực hiện lệnh sau:

 curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python - 

Thư mục cài đặt mặc định cho pip được đặt tại:

/usr/local/bin 

Để sử dụng nó mà không nói rõ đường dẫn đầy đủ, nó phải được thêm vào PATH .

Cập nhật PATH :

 export PATH="/usr/local/bin:$PATH" 

Sau khi hoàn thành bước này, ta đã sẵn sàng làm việc với pip .

Sử dụng pip


Sử dụng pip thực sự thú vị và có thể được coi là không đau đầu. Nếu bạn đã từng giải quyết các vấn đề cực kỳ không cần thiết trong quá khứ và thậm chí không hiểu tại sao, pip sẽ đảm bảo chúng được giữ ở mức tối thiểu cho bạn ở đây.

Cài đặt các gói bằng pip


pip có thể làm được nhiều thứ nhưng sẽ không có gì là sai lầm khi nói rằng chức năng thường được sử dụng nhất của nó là cài đặt các gói . Có một số cách nó có thể giải quyết công việc này cho bạn.

Tìm và cài đặt các gói:

 # Example: pip install [package name]  # Let's install the excellent *requests* library  pip install requests 

Tìm và cài đặt một version cụ thể:

 # Example: pip install [package name]==[version]  # Let's install version 2.0.0. of requests  pip install requests==2.0.0 

Cài đặt từ URL hoặc repository VCS:

 # Example: pip install [url]  # Let's install virtualenv  pip install https://github.com/pypa/virtualenv/tarball/1.9.X 

Cài đặt bên trong virtualenv :

 # Example: pip install [env name] [package name]  # This will either install inside an environment, or create one  # Let's install requests inside a virtualenv called *venv*  pip install -E venv requests 

Gỡ cài đặt các gói bằng pip :


Chức năng phổ biến thứ hai của pip có lẽ là gỡ cài đặt các gói.

Gỡ cài đặt một gói:

 # Example: pip uninstall [package name]  # Let's remove requests library  pip uninstall requests  

Nâng cấp gói bằng pip


Nếu bạn đang nghĩ đến việc gỡ cài đặt để cài đặt version mới hơn của ứng dụng, bạn có thể thử nâng cấp .

Nâng cấp gói:

 # Example: pip install --upgrade [package name]  # Let's upgrade requests library  pip install --upgrade requests 

Tìm kiếm các gói bằng pip


Trước khi quyết định xóa hoặc nâng cấp một gói, trước tiên bạn có thể cảm thấy cần phải tìm kiếm một gói.

Tìm kiếm một gói:

 # Example: pip search [package name]  # Let's find all django packages  # This might take a while (there's tonnes of them!)  pip search django 

Tạo danh sách các gói đã cài đặt bằng pip


Một trong những khả năng thực sự đặc biệt và tiết kiệm tuổi thọ nhất của pip là có thể tạo - dễ dàng - danh sách ("đóng băng") các gói được cài đặt . Đây cũng thường được gọi là yêu cầu . Tùy thuộc vào môi trường Python của bạn (cho dù đó là môi trường ảo hay global ), pip sẽ tạo một file liệt kê tất cả các gói được cài đặt bằng một lệnh duy nhất.

Tạo một danh sách mới ("đóng băng"):

Lưu ý: Lệnh này sẽ xuất ra một file trong folder làm việc hiện tại.

 # Example: pip freeze > [file name.ext]  # Let's list all the packages currently installed  pip freeze > package_list.txt 

Tạo danh sách ("đóng băng") trên đầu mẫu:

Lưu ý: Lệnh này sẽ xuất ra một file trong folder làm việc hiện tại.

 # Example: pip freeze -r [existing file.ext] > [filename.ext]  # Let's append new packages installed after the last freeze  pip freeze package_list.txt > package_list_new.txt 

Cài đặt tất cả các gói từ danh sách với * pip


Khi bạn đang làm việc trên một ứng dụng - tốt nhất là bên trong môi trường ảo - bạn sẽ cài đặt tất cả các phần phụ thuộc của nó ( gói bắt buộc ) ở đó. Sau khi extract danh sách chúng bằng cách sử dụng tính năng đóng băng , bạn có thể cài đặt lại chúng bằng cài đặt .

Cài đặt tất cả các gói từ một danh sách (“đóng băng”):

 # Example: pip install -r [file name.ext]  # Let's install back all the packages from the previous example  pip install -r package_list_new.txt 

Hướng dẫn thực hiện Virtualenv kỹ lưỡng


Hãy bắt đầu với việc xác định chính xác virtualenv là gì và tình huống mà nó có ích.

virtualenv:

Trong thế giới của Python, môi trường là một folder (thư mục) chứa mọi thứ mà một dự án Python (ứng dụng) cần để chạy một cách có tổ chức, riêng biệt. Khi nó được khởi tạo, nó tự động đi kèm với trình thông dịch Python của riêng nó - một bản sao của trình được sử dụng để tạo nó - cùng với pip rất riêng của nó.

Có một số vấn đề mà virtualenv giải quyết:

  • Tạo một môi trường mới, cô lập cho một dự án Python
  • Có thể download các gói mà không yêu cầu quyền quản trị / sudo
  • Dễ dàng đóng gói ứng dụng
  • Tạo danh sách các phụ thuộc thuộc về một dự án được tạo bằng pip
  • Dễ dàng khôi phục các phần phụ thuộc bằng cách sử dụng file yêu cầu được tạo bằng pip
  • Mở đường cho tính di động trên các hệ thống

Sử dụng virtualenv cách khuyến khích để làm việc với các dự án Python, dù có bao nhiêu bạn có thể bận rộn với. Nó rất dễ sử dụng và là một công cụ tuyệt vời để bạn có thể dùng một lần. Nó thực sự làm nên điều kỳ diệu khi kết hợp với pip .

Ta sẽ bắt đầu với việc cài đặt virtualenv hệ thống.

Cài đặt virtualenv


Để cài đặt virtualenv , ta sẽ gọi bằng pip để được trợ giúp. Ta sẽ cài đặt nó dưới dạng một gói có sẵn trên phạm vi global để trình thông dịch Python chạy.

Có hai cách để có được ứng dụng. Phiên bản bạn có thể nhận được tùy thuộc vào việc bạn chọn version nào.

Phương pháp đơn giản nhất là sử dụng pip để tìm kiếm, download và cài đặt. Điều này có thể không cung cấp cho bạn version ổn định mới nhất.

Download virtualenv bằng pip :

 # Example: [sudo] pip install virtualenv  sudo pip install virtualenv 

Download bản mới nhất hiện có bằng curl :

Phiên bản mới nhất của virtualenv1.11.X

 # Example: [sudo] pip install [github repo]/[version]  sudo pip install https://github.com/pypa/virtualenv/tarball/1.1.X 

Sử dụng virtualenv


Sử dụng công cụ này bao gồm việc sử dụng nó để tạo một folder , chứa trình thông dịch Python và một bản sao của pip . Sau đó, để làm việc với nó, ta cần chỉ định vị trí của trình thông dịch đó hoặc activate nó.

Tất cả các ứng dụng bạn cài đặt bằng trình thông dịch bên trong môi trường ảo sẽ nằm trong vị trí đó.

Khi bạn sử dụng pip để tạo danh sách chúng, chỉ những cái bên trong folder mới được biên dịch thành file .

Hãy nhớ: Khi bạn làm việc xong với một môi trường, trước khi chuyển sang môi trường khác - hoặc làm việc với môi trường được cài đặt global - bạn cần đảm bảo deactivate nó.

Tạo / Khởi tạo môi trường ảo (virtualenv)


Tạo một môi trường bằng cách sử dụng cùng một trình thông dịch được sử dụng để chạy nó:

 # Example: virtualenv [folder (env.) name]  # Let's create an environment called *my_app*  virtualenv my_app 

Tạo môi trường với trình thông dịch Python tùy chỉnh:

 # Example: virtualenv --python=[loc/to/python/] [env. name]  virtualenv --python=/opt/python-3.3/bin/python my_app 

Kích hoạt môi trường ảo

 # Example: source [env. name]/bin/activate  # Let's activate the Python environment we just created  source my_app/bin/activate 

Làm việc với môi trường ảo mà không cần kích hoạt


Vì nhiều lý do khác nhau, bạn có thể chọn không kích hoạt môi trường trước khi sử dụng nó. Điều này mang lại sự linh hoạt hơn cho các lệnh bạn chạy, tuy nhiên, bạn cần đảm bảo nhắm đến đúng trình thông dịch mỗi lần.

 # Example: [env. name]/bin/python [arguments]  my_app/bin/python python_script.py 

Sử dụng cài đặt pip bên trong môi trường mà không cần kích hoạt

 # Example: [env. name]/bin/pip [command] [arguements]  # Let's install requests library without activating the env.  my_app/bin/pip install requests 

Hủy kích hoạt môi trường ảo :

 # Example: deactivate  # Let's deactivate the environment from earlier  deactivate  

<div class = “author”> Gửi bởi: <a
href = “https://twitter.com/ostezer”> OS Tezer </div>


Tags:

Các tin liên quan

Cách tạo plugin Nagios bằng Python trên Ubuntu 12.10
2013-04-29
Cách tạo plugin Nagios bằng Python trên CentOS 6
2013-04-29